Добавление скрытого поля в beforeunload - PullRequest
0 голосов
/ 09 декабря 2011

На моей странице я использую форму, которая при отправке должна получить дополнительные скрытые поля.Проблема, однако, в том, что я не могу знать ни имя / идентификатор формы, ни кнопку отправки, поэтому я не могу использовать такие функции, как onClick и т. Д. Поэтому я использую событие beforeunload, чтобы вызвать событие, когда пользователь пытается выйтистраница (это включает в себя отправку формы).Я использую document.activeElement, чтобы выяснить, что вызвало событие, и, если это форма / отправить, я добавляю скрытые поля в форму.

Удаляя код, он сводится к чему-то вроде этого:

var javascriptData = ['val1','val2','val3']; // usually gets values dynamically and can differ in size
$(window).bind('beforeunload', function(e) {
    var activeForm = document.activeElement.form;
    for(var i = 0; i < javascriptData.length; i++){
        $(activeForm).append('<input type="hidden" name="test-data[]" value="'+javascriptData[i]+'" />');
    }
    return false; // just for debug purposes.
}

Код работает, и элемент добавляется в форму, но он не отображается в $ _POST на следующей странице.Однако последняя строка кода (возвращаемое значение false) создает всплывающее окно с вопросом, хочу ли я покинуть страницу, если я останусь на странице, снова нажмите кнопку отправки и , затем выйдите из страницы и проверьте$ _POST, поле есть.Я предполагаю, что данные для $ _POST собираются до запуска функции beforeunload.

Мой вопрос: «Есть ли способ обойти это, чтобы я мог добавить скрытое поле к форме в событии beforeunload?».

Помощь очень ценится, заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Почему бы не добавить его во все формы на странице?

$(document).ready(function() {
  $("form").append('<input type="hidden" name="test-data[]" value="test" />');
});
2 голосов
/ 09 декабря 2011

Как и вышеупомянутые комментарии, вы можете просто подключиться к событию отправки.

$('form').submit(function() {
    for(var i = 0; i < javascriptData.length; i++){
        $(this).append('<input type="hidden" name="test-data[]" value="'+javascriptData[i]+'" />');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...