Jquery 代码在IE/Opera中运行多次

Jquery 代码在IE/Opera中运行多次,jquery,ajax,Jquery,Ajax,我的页面上有一个问题,在IE和Opera中多次执行代码,尽管它在FF、Chrome和Safari中工作。我正在使用最新的jQuery、验证插件和表单插件。我的代码源于以下html: <form action="/case_study/php/survey_submit.php" id="mt_survey" method="post"> ... ... <fieldset id="submit_button_box"> <input

我的页面上有一个问题,在IE和Opera中多次执行代码,尽管它在FF、Chrome和Safari中工作。我正在使用最新的jQuery、验证插件和表单插件。我的代码源于以下html:

<form action="/case_study/php/survey_submit.php" id="mt_survey" method="post">
...
...             
<fieldset id="submit_button_box">
    <input id="submit_button" type="submit" value="Submit Case Data" />
</fieldset></form>
现在,当我第一次单击submit按钮时,它就可以工作了。此时,表单将被清除,以获取下一组数据。这是通过以下代码完成的

  $('#clear_form').click(function() {
    $("#mt_survey").resetForm();
    $("#messages").replaceWith('<div id="messages"></div>');
    $("#messages").hide();
    $("#escort_div").hide();
    $("#transport_a_div").hide();
    $("#transport_l_div").hide();
    $("#item_div").hide();
    $("#item2_div").hide();
    $("label.error").hide();
    $("#correction_button").attr('disabled', 'disabled');
    $("#submit_button").attr('disabled', '');
  });
$(“#清除表单”)。单击(函数(){
$(“#mt#U调查”).resetForm();
$(“#消息”)。替换为(“”);
$(“#消息”).hide();
$(“#护卫师”).hide();
$(“#transport_a_div”).hide();
$(“#transport_l_div”).hide();
$(“#item_div”).hide();
$(“#item2_div”).hide();
$(“label.error”).hide();
$(“#更正按钮”).attr('disabled'、'disabled');
$(“#提交按钮”).attr('禁用','');
});

现在,一旦完成,表单get将再次填写,并再次单击submit。但这一次在IE和Opera中,它的代码运行了多次。我知道,自从我把警报放在那里检查以来,它肯定运行了多次,但主要是多次调用我的“survey_submit.php”文件,并将数据插入MySQL。你知道为什么吗?它困扰了我很长一段时间,我看不出它为什么这么做。

你真的需要使用表单插件吗?你可能会得到同样的效果使用

$('#mt_survey').submit(function() {
   var $this = $(this);
   if ( ($this.valid() == true) || confirm("Unfinished form, continue saving as temporary?")) {
     $.ajax({
        data: $this.serialize + "&table=mt_data",
        success: function(response) { 
          $('#messages').html(response).fadeIn('slow'); //you may also need to do some processing of the response data before injecting as html
          $( 'html, body' ).animate( { scrollTop: 0 }, 0  );}
         });
       }
   return false;
  });

然后调试会更容易

IE和opera正在缓存数据并使用缓存数据,这就是为什么您下次无法调用

将代码更改为:

$('#mt_survey').ajaxSubmit({
     cache : false,
     data: {table: "mt_data"},

我已经遇到了这个问题,希望它能帮助你

$(“#messages”).empty()而不是
$(“#消息”)。替换为(“”)?resetForm()的作用是什么?我知道这不是标准的jQuery方法。我建议在jQuery中创建一个“计数器”,如果要保存表单的临时副本,则将其设置为1,否则,默认为0。在.submit{}上,检查计数器的值并根据之前所做的操作在到达action=”“目标之前停止提交。@我认为alexp resetForm()是jQuery验证的一部分。我不认为这里有任何东西会导致这种情况,我们还能看到其他代码吗?
$('#mt_survey').ajaxSubmit({
     cache : false,
     data: {table: "mt_data"},