onBeforeUnload и несколько форм - PullRequest
1 голос
/ 10 марта 2010

Я хочу иметь возможность отправлять несколько форм на странице, когда пользователь покидает страницу. Есть это "ты хочешь спасти?" вопрос и мой код пока так:

function checkForChanges( ) {
  if (window.formform1Changed == true) {
    if (window.asked == false) {
      window.asked=true;
      doSave = confirm("Wanna save? Click OK")
    }
    if (window.doSaveForms || doSave) {
      window.doSaveForms = true;
      document.forms.form1.submit();
    }
  }
  if (window.formform2Changed == true) {
    if (window.asked == false) {
      window.asked=true;
      doSave = confirm("Wanna save? Click OK.")
    }
    if (window.doSaveForms || doSave) {
      window.doSaveForms = true;
      document.forms.form2.submit();
    }
  }
}

Это может показаться немного излишним, но оно генерируется автоматически нашим механизмом шаблонов и может быть расширено до нескольких форм.

Тег тела:

<body
 onLoad="init();
         window.formform1Changed=false;
         window.asked=false;
         window.doSaveForms=false;
         window.formform2Changed=false;"
 onbeforeunload="checkForChanges();">

И интересная часть одной из форм (другая выглядит одинаково:

<input value="xyz" id="la" onchange="window.formform1Changed=true;" />
<input name="save" onclick="window.formform2Changed=false; window.formform1Changed=false;" type="submit" value="save" />

Теперь к проблеме: Если я изменю значения в обеих формах и уйду со страницы, появится вопрос из первой формы. Я нажимаю OK, форма сохраняется, но form1.submit() вызывает новое событие onBeforeUnload, которое нарушает всю логику моей идеи.

Теперь вопрос заключается в том, есть ли способ отправить все формы на страницу, когда запрашивается только один раз, когда пользователь уходит?

Любая помощь высоко ценится!

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Отправка формы требует обратной отправки, после того как вы отправите первую форму, ваша страница будет перенаправлена ​​на «действие» этой формы, и вы потеряете информацию в остальных формах, которые у вас есть.

Наличие нескольких форм на странице - не лучшая идея, однако, если они абсолютно необходимы, способ сохранить их все будет состоять в том, чтобы заменить полный постбэк вызовом AJAX на веб-сервис или отдельная страница, которая принимает параметры строки запроса, хотя это не такой безопасный или гибкий способ). Таким образом, вы можете отправить каждую форму через вызов AJAX без перенаправления страницы.

0 голосов
/ 10 марта 2010

Как сказал SLaks, вы не сможете отправить несколько форм так, как пытаетесь. У вас есть некоторые другие варианты, хотя. Вместо традиционной отправки формы вы можете сделать какие-то вызовы ajax, чтобы сохранить данные формы, которые вас интересуют. Вот пример использования jquery и php ( link )

...