【问题标题】:How to prevent a page reload when clicking a zend_form_element_submit button?单击 zend_form_element_submit 按钮时如何防止页面重新加载?
【发布时间】:2012-03-21 08:40:03
【问题描述】:

我是 zend 框架的初学者。 我使用 zend_form 和 zend_form_element_submit 创建了一个带有提交按钮的表单。单击提交后,代码会根据输入执行数据操作。如果没有输入任何内容,则不会发生任何事情。

当我单击提交按钮时,即使没有任何更改,它也会重新加载我的网页。 有什么办法可以防止该页面加载?我可以使用会触发事件的 zend_form_element_button 吗?我将如何捕捉它?

任何帮助将不胜感激! 谢谢。

【问题讨论】:

    标签: zend-framework zend-form


    【解决方案1】:

    提交按钮总是会导致表单提交,这通常会导致页面重新加载,无论任何表单元素中的数据是否“正确”。

    使用 Zend 框架,您可以向表单添加 JavaScript onsubmit 事件,该事件可以检查表单元素并决定是否应该提交表单。或者您可以使用 Ajax 提交不会导致页面重新加载的表单。

    这是使用onsubmit 的示例。您将在控制器上创建表单,将其分配给视图,然后在您的视图中添加 onsubmit 属性和相关代码。

    view.phtml

    <?php
    
    $this->form->setAttrib('onsubmit', 'return checkForm()');
    
    echo $this->form;
    ?>
    
    <script type="text/javascript">
      function checkForm()
      {
          if (form_passes_validation) {
              return true; // form will submit
          } else {
              return false; // form will NOT submit (if javascript is enabled)
          }
      }
    </script>
    

    您必须想出form_passes_validation 的逻辑,但如果onsubmit 返回false,则不会发送表单。

    请记住,PHP 都是服务器端。您无法进行任何 PHP 处理来确定表单是否应该发送,这一切都必须在客户端,否则即使没有输入数据,您也必须忍受表单重新加载页面。

    【讨论】:

    • 感谢您的回复。从我读到的关于 Ajax 的少量信息来看,它可能会成为我的第一选择。再次感谢。
    • 没问题,这将是一个好方法。您可以使用像 jQuery 或 Prototype 这样的库来帮助处理 Ajax 请求。您可能希望将请求提交给 Zend Framework 控制器,该控制器将使用JSON 处理表单并最有可能输出成功/失败消息。 Zend 的助手可以为您输出 JSON 内容,进而禁用您的布局和视图渲染。
    • 我最终选择了 jQuery。我在我的控制器中创建了一个名为 testAction 的测试操作,我想用它来处理表单。不过,我在 ajax 请求中引用 url 时遇到了麻烦。关于我做错了什么的任何想法?这是我的代码: $.ajax({ type: "POST", url: "url(array('controller' => 'compare', 'action' => 'test'), null , true); ?>", data: dataString, 成功: function(msg) {
    猜你喜欢
    • 2021-03-01
    • 2012-12-09
    • 2019-04-12
    • 2019-06-24
    • 2023-03-13
    • 2012-11-24
    • 2017-04-30
    • 2016-02-01
    相关资源
    最近更新 更多