2010-07-23 105 views
4

我的代码在IE和Opera中多次执行代码,但在FF,Chrome和Safari中都有问题。我正在使用最新的jQuery,验证插件和表单插件。我的代码从下面的HTML来源:代码在IE/Opera中多次运行

<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> 

当我点击提交按钮,应该运行下面的jQuery:

$('#mt_survey').submit(function() { 
    if (($("#mt_survey").valid() == true) || confirm("Unfinished form, continue saving as temporary?")) { 
     $('#mt_survey').ajaxSubmit({ 
     data: {table: "mt_data"}, 
     target: '#messages', 
     success: function() { 
      $('#messages').fadeIn('slow'); 
      $('html, body').animate({ scrollTop: 0 }, 0 );} 
      }); 
     } 
    return false; 
    }); 

现在,当我点击提交按钮第一次工作的。此时,表单将被清除以用于下一组数据。这是通过以下代码完成的。

$('#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', ''); 
    }); 

现在,一旦完成,表单get再次填写,并提交再次点击。但是这次在IE和Opera中,它的代码会运行多次。我知道它肯定会运行多次,因为我通过将警报放在那里进行检查,但大多数情况下它多次调用我的“survey_submit.php”文件并将数据插入到MySQL中。任何想法为什么?这一直困扰我很长一段时间,我没有看到它为什么这样做的理由。

+0

'$(“#messages”)。empty();'而不是'$(“#messages”)。replaceWith('

');'? – 2011-09-12 12:12:25

+0

resetForm()是做什么的?这不是我意识到的标准jQuery方法。 – alexp 2012-01-13 20:20:50

+0

我建议在jquery中创建一个“计数器”,如果要保存表单的临时副本,则将其设置为1,否则默认为0.在.submit {}上检查计数器的值,并在提交之前暂停提交根据之前做过的事情,将目标移至“action =”目标。 – Ortund 2012-01-18 06:01:09

回答

0

你真的需要使用表单插件吗?你可以使用

$('#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; 
    }); 

可能得到相同的效果,然后调试会更容易

0

IE和Opera的缓存中的数据,并使用高速缓存数据,这就是为什么你不能打电话给下一次

切换到代码:

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

我已经遇到这个问题,希望这将有助于你