【问题标题】:jquery post() is not working in a dynamic formjquery post() 不能以动态形式工作
【发布时间】:2011-02-07 23:38:02
【问题描述】:

我正在处理一个从数据库动态生成的简单表单,我想出了这个简单的表单只是为了尝试它,但显然工作正常,但是在第二次提交同一个表单后有点保留旧的值o.O

<script src="jquery-1.4.4.js" type="text/javascript"></script>

<script type="text/javascript">


  function init(items,userId) {  
    var inputdata = $("#qty_"+items).val();
    var userId = userId;
    alert(inputdata);
    $("#form_"+items).live("submit", function() {
      $.post("test_query.php", { value:inputdata, userId:userId }, 
        function(data){
          $('#results').empty();
          alert(data);
        });

       return false;

      });

    };

</script>


<?php

for($i=1; $i <2; $i ++)
{
echo "
    <div>
    <form id='form_".$i."'>
        <input id='qty_".$i."' type='text' autocomplete='OFF' />
        <input type=\"submit\" value=\"submit\" onclick=\"init(".$i.",2)\"/>
    </form>
    <script>

    </script>
    </div>
";
}
?>
</div>

更新:忘记提到提交时不刷新页面的想法。并且表单名称/id 是动态生成的。

【问题讨论】:

  • 您是否在实时提交的顶部尝试过 e.stopPropagation()?这听起来像是一个冒泡的问题。如果这不能解决它,您可以在某处放置表单的现场演示吗?
  • 确保它是这样的` $("#form_"+items).live("submit", function(e) {` 然后紧接着把e.stopPropagation()
  • 这与传播无关,因为无论如何“活”处理程序总是在身体上。这是必须阻止的默认操作,处理程序末尾已经存在的return false; 将负责这一点。

标签: php javascript jquery ajax post


【解决方案1】:

您正在尝试做同样的事情 — 管理表单的“提交”事件处理程序 — 有两种方式,但这并不完全正确。您正在生成表单 HTML,以便“提交”按钮通过“单击”处理程序调用您的“初始化”例程。这段代码有什么作用?它为表单“提交”事件设置另一个事件处理程序。该处理程序将始终使用第一次调用时传递的参数。

您应该要么坚持使用“onsubmit”处理程序,或者(更好地)本能地使用jQuery“live”或“delegate”工具来设置您的处理程序。然后你的初始化代码将进入一个 jQuery “就绪”处理程序,而你将完全放弃“onsubmit”的东西:

$(function() {
  $('body').delegate('form', 'submit', function() {
      $.post("test_query.php", { value: $(this).find('input:text').val(), userId: 2 }, 
        function(data){
            $('#results').empty();
            alert(data);
            $('#results').html(data);
         }
       );
   });

   return false;
});

【讨论】:

  • 感谢您的回复,是的,我使用了 init 函数,因为每个表单都是从数据库生成的,这就是为什么,我无法想到如何从正确的表单中获取数据(因为表单名称将生成),但我不知道我现在正在阅读的委托 :)
  • @mike ".delegate()" 的东西实际上和 ".live()" 是一样的,但它只是更新更好一点。基本思想是一样的。
  • 感谢 Pointy,对不起,我对此很不了解,但我试过了,但我没有显示任何内容 :( 我认为是因为不知道表单的 id?
猜你喜欢
  • 2013-08-25
  • 2017-07-01
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2016-12-07
  • 1970-01-01
  • 2012-03-12
相关资源
最近更新 更多