2010-03-10 3 views
1

Я хочу иметь функцию отправки нескольких форм на странице, когда пользователь покидает страницу. Это «ты хочешь сохранить?» вопрос и мой код до сих пор, как это:onBeforeUnload и несколько форм

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, которое разбивает всю логику моего идея.

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

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

Спасибо.

+0

Как только вы отправите первую форму, содержимое других форм исчезнет. – SLaks

+0

Итак, нет способа отправить несколько форм, это то, что я прочитал из этого комментария? –

ответ

1

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

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

+0

Спасибо, теперь я знаю, по крайней мере, в чем проблема. Мне придется попытаться обойти это ... –

0

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

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