2010-07-23 3 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; 
    }); 

Теперь это работает, когда я нажимаю на кнопку 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', ''); 
    }); 

Теперь, после того, как это будет сделано, форма get будет заполнена снова, и отправить снова нажмите. Но на этот раз в IE и Opera код для него запускается несколько раз. Я точно знаю, что он запускается несколько раз, так как я проверил, разместив там предупреждения, но чаще всего он вызывает мой файл «survey_submit.php» несколько раз и вставляет данные в MySQL. Любые идеи почему? Меня это мучила долгое время, и я не вижу причин, почему это так.

+0

'$ (" # messages "). Empty();' вместо '$ (" # messages "). ReplaceWith ('

');'? –

+0

Что делает resetForm()? Это не стандартный метод jQuery, о котором я знаю. – alexp

+0

Я рекомендую создать «счетчик» в jquery и установить его в 1, если временная копия формы должна быть сохранена, в противном случае - по умолчанию 0. В .submit {}, проверьте значение счетчика и прекратите подачу до того, как он получит к цели action = "", основанной на том, что было сделано ранее. – Ortund

ответ

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 и опера являются кэширование данных и использование кэша данных, поэтому вы не можете позвонить в следующий раз

Изменить код:

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

Я уже сталкивался с этой проблемой, надеюсь, что это поможет вам

Смежные вопросы