jquery post()不是以动态形式工作

时间:2011-02-07 23:38:02

标签: php javascript jquery ajax post

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

<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是动态生成的。

1 个答案:

答案 0 :(得分:0)

你正在尝试做同样的事情 - 管理你的表单的“提交”事件处理程序 - 有两种方式,而且它确实不对。您正在生成表单HTML,以便“提交”按钮通过“单击”处理程序调用您的“init”例程。那段代码做了什么?它为表单中的“提交”事件设置另一个事件处理程序。该处理程序将始终使用第一次调用时传递的参数。

你应该 坚持使用“onsubmit”处理程序,或者(更好)与你的直觉一起使用jQuery“live”或“delegate”工具来设置你的处理程序。然后你的初始化代码将进入一个jQuery“ready”处理程序,你完全不用“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;
});