2012-07-01 3 views
0

У меня есть form.edit_recipe, и моя цель - получить эту форму, чтобы успешно сохранить (если есть новые данные) до того, как страница выгрузится без запроса пользователя.jquery beforeunload submit form

Это критический бит JQ:

$(document).ready(function() { 
     $(window).bind('beforeunload', function() { 
     if (auto_save_timer) { // auto_save_timer == true means there are changes 
      $("#auto_save_overlay").css('display', 'block'); // shows a spinner 
      $(".edit_recipe").submit(); 
     } 
     }); 
    }); 

При нажатии на ссылку на следующую страницу, иногда изменения сохранять и иногда они этого не делают, даже в одинаковых ситуациях и наборов данных.

Я на 99% уверен, что мои другие переменные и JQ на странице не влияют на это, но я могу обновить с большим количеством примеров кода, если это необходимо.

Я потерял или проблема, но я чувствую, что это связано с тем, что данные формы прерываются при загрузке следующей страницы.

Любые предложения?

EDIT: Спасибо за предложения до сих пор. Я думаю, что я должен прислушаться к совету @ see163 и, возможно, подумать о том, чтобы заставить пользователя вручную нажать кнопку сохранения и просто добавить alert(), если есть несохраненные изменения. Это более ортодоксальный подход? И какие события/действия JQuery следует использовать для кросс-браузера, если .beforeunload - это мусор в Opera и Chrome?

+0

попробуйте позвонить .submit() перед .css() – maxhud

+0

@maxhud Спасибо за предложение , переключение '.css' и' .submit', похоже, увеличивает скорость, с которой это работает, но по-прежнему не удается сохранить изменения. Я надеюсь на «правильный» способ сделать это, а не на польский для моего poo. – RickyD

ответ

1

unload и beforeunload не работают в опера все время и в хроме иногда.

Будьте осторожны.

+1

Разве это не комментарий? Это не решит проблему. – 11684

+0

это важное замечание – see613

+0

Я думаю, что любой из решений этой проблемы не является кросс-браузером. – see613

0

На каждой ссылке вы можете сделать:

<a href="javascript:submitForm('URL HERE')">............</a> 

И тогда в ваших JS сделать:

function submitForm(url){ 
     if (auto_save_timer) { 
        $("#auto_save_overlay").css('display', 'block'); 
          $(".edit_recipe").submit(); 
      window.location = url; 
        } 
    }