javascript - 使用 event.preventdefault() 不会阻止 ajax 返回的表单

标签 javascript php jquery ajax forms

我有2个文件testjquery.php和abcd.php 在表单提交上调用ajax调用并使用ajax方法提交它。第一次它使用 event.preventdefault 阻止表单 defaultevent 并将响应数据从其他页面加载到 div 中。 但是当我再次尝试提交它时, event.preventdefault 在表单上不起作用。 请帮忙。提前致谢。

//testjquery.php

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

    </head>

    <body>


    <div id="abc">
      <form action="abcd.php" method="post" accept-charset="utf-8" name="cartform">
        <table cellpadding="6" cellspacing="1" style="width:100%" border="0">
          <tr>
            <th>QTY</th>
            <th>Item Description</th>
            <th style="text-align:right">Item Price</th>
            <th style="text-align:right">Sub-Total</th>
          </tr>
          <input type="hidden" name="cartrowid[1]" value="d68b70f3503216b22484eef9c786124a" />
          <tr>
            <td><input type="text" name="cartrowqty[1]" value="1" maxlength="3" size="5"  /></td>
            <td> micromax_A12112
              <p> <strong>Size:</strong> L<br />
                <strong>Color:</strong> Red<br />
              </p></td>
            <td style="text-align:right">123.00</td>
            <td style="text-align:right">$123.00</td>
          </tr>
          <input type="hidden" name="cartrowid[2]" value="e376db925db6430cf3e82c3854b4f5e2" />
          <tr>
            <td><input type="text" name="cartrowqty[2]" value="1" maxlength="3" size="5"  /></td>
            <td> Indian_Saree
              <p> <strong>Size:</strong> L<br />
                <strong>Color:</strong> Red<br />
              </p></td>
            <td style="text-align:right">2,555.00</td>
            <td style="text-align:right">$2,555.00</td>
          </tr>

        </table>
        <p>
          <input type="submit" name="add_item_via_ajax_form" value="Update your Cart" class="add_item_via_ajax_form"  />
        </p>
      </form>
        <a href="http://w3schools.com/">Go to W3Schools.com</a>
    <p>The preventDefault() method will prevent the link above from following the URL.</p>
    </div>
    </body>
    </html>
    <script>
    $(function() 
    {


        // Example of adding a item to the cart via a link.
        $('.add_item_via_ajax_form').click(function(event)
        {
            alert(1);
            event.preventDefault();

            // Get the parent form.
            var parent_form = $(this).closest('form');

            // Get the url the ajax form data to be submitted to.
            var submit_url = parent_form.attr('action');

            // Get the form data.
            var $form_inputs = parent_form.find(':input');
            var form_data = {};
            $form_inputs.each(function() 
            {
                form_data[this.name] = $(this).val();
            });

            $.ajax(
            {
                url: submit_url,
                type: 'POST',
                data: form_data,
                success:function(data)
                {
                    //alert(data);
                        event.preventDefault();
                    ajax_update_mini_cart(data);
                }
            });
        });

        // A function to display updated ajax cart data from the mini cart menu.
        function ajax_update_mini_cart(data)
        {   


            $('#abc').html(data);

            $('#mini_cart_status').show();

            // Set the new height of the menu for animation purposes.
            var min_cart_height = $('#mini_cart ul:first').height();
            $('#mini_cart').attr('data-menu-height', min_cart_height);
            $('#mini_cart').attr('class', 'js_nav_dropmenu');

            // Scroll to the top of the page.
            $('body').animate({'scrollTop':0}, 250, function()
            {
                // Notify the user that the cart has been updated by showing the mini cart.
                $('#mini_cart ul:first').stop().animate({'height':min_cart_height}, 400).delay(3000).animate({'height':'0'}, 400, function()
                {
                    $('#mini_cart_status').hide();
                });
            });
        }
    });
    </script>
    <script>
    $(document).ready(function(){
      $("a").click(function(event){
        event.preventDefault();
      });
    });
    </script>


//abcd.php

<form action="abcd.php" method="post" accept-charset="utf-8" name="cartform">
    <table cellpadding="6" cellspacing="1" style="width:100%" border="0">
      <tr>
        <th>QTY</th>
        <th>Item Description</th>
        <th style="text-align:right">Item Price</th>
        <th style="text-align:right">Sub-Total</th>
      </tr>
      <input type="hidden" name="cartrowid[1]" value="d68b70f3503216b22484eef9c786124a" />
      <tr>
        <td><input type="text" name="cartrowqty[1]" value="1" maxlength="3" size="5"  /></td>
        <td> micromax_A12112
          <p> <strong>Size:</strong> L<br />
            <strong>Color:</strong> Red<br />
          </p></td>
        <td style="text-align:right">123.00</td>
        <td style="text-align:right">$123.00</td>
      </tr>
      <input type="hidden" name="cartrowid[2]" value="e376db925db6430cf3e82c3854b4f5e2" />
      <tr>
        <td><input type="text" name="cartrowqty[2]" value="1" maxlength="3" size="5"  /></td>
        <td> Indian_Saree
          <p> <strong>Size:</strong> L<br />
            <strong>Color:</strong> Red<br />
          </p></td>
        <td style="text-align:right">2,555.00</td>
        <td style="text-align:right">$2,555.00</td>
      </tr>

    </table>
    <p>
      <input type="submit" name="add_item_via_ajax_form" value="Update your Cart" class="add_item_via_ajax_form"  />
    </p>
  </form>
  <a href="http://w3schools.com/">Go to W3Schools.com</a>
<p>The preventDefault() method will prevent the link above from following the URL.</p>

最佳答案

线路

$('#abc').html(data);

用 ajax 请求中的新 html 代码替换 div id="abc"的所有内容。

此新内容没有附加任何事件处理程序,并且表单以“正常”方式提交。要修复它,您必须添加一个新的

$('.add_item_via_ajax_form').click(function(event) {}

在你的

function ajax_update_mini_cart(data) {}

之后

$('#abc').html(data);

这将添加处理程序,并且每次都会通过 ajax 提交表单。

关于javascript - 使用 event.preventdefault() 不会阻止 ajax 返回的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26715791/

相关文章:

javascript - Components.utils.import() 中是否可以使用相对 URL/路径?

javascript - xPath - 从 anchor 链接中提取 href 的内容

javascript - 涵盖 Array 和 Typed Arrays 的 TypeScript 接口(interface)

php - 一键更新 mySQL 数据库

jquery - 按钮与 HTML 中的可点击 Div

Javascript num.zeros

php - 如何使用符号链接(symbolic link)的 Composer 包进行开发,但从 vcs 存储库构建?

php - 我怎么知道在我的 select sql 中查询了哪些表?

javascript - 如何根据文本的长度自动调整固定DIV中的文本大小?

jquery - 使用 Bootstrap Dropdown - 通过 Jquery 聚焦输入