Я работаю над веб-интерфейсом продукта, похожего на устройство.
У меня есть HTML-форма, которая отлично работает: она показывает список вещей с флажками, пользователь проверяет некоторые из них и нажимает кнопку «удалить», которая отправляет форму. Сервер получает сообщение POST, удаляет элементы и обновляет страницу. Все хорошо.
Требуется добавить "Вы уверены?" подтверждение к форме. Если я добавлю вызов на
confirm("are you sure?");
в качестве метода onsubmit в теге FORM или щелчка в теге кнопки submit, он работает нормально, но использует уродливое диалоговое окно подтверждения браузера.
В другом месте продукта у нас есть хороший настраиваемый диалог подтверждения в стиле CSS, который я хотел бы использовать, но он работает так: В соответствующем месте вы вызываете
myConfirm("Confirm", "Are you sure", "Yes", "No", confirmCallback);
Это создает маску кликов, настраивает диалог, центрирует и отображает его, а затем возвращает FALSE, а форма не отправляется.
Позже, когда пользователь решает, если он нажимает «Да», он вызывает функцию verifyCallback. На других страницах продукта, основанных на Ajax, он собирает информацию, создает postBody и использует объект Ajax Prototype для его публикации, и все в порядке. (Если «Нет», диалоговое окно и маска клика удаляются и все продолжается.)
На этой более простой странице с чистой HTML-формой у меня есть функция verifyCallback, которая выглядит следующим образом:
var confirmCallback = function() {
document.myForm.submit();
}
и он срабатывает ОК, но когда форма отправлена, кнопка удаления уже нажата, и ложное значение, возвращаемое пользовательским подтверждением, подавляет отправку. Вместо этого это считается новой отправкой, а кнопка удаления фактически не была нажата, поэтому она не считается "успешной" с точки зрения стандартного раздела W3.org HTML 4 17.13.3. Сервер получает данные, кнопка удаления отсутствует, говорит: «Я получил это, но я не знаю, что вы хотите, чтобы я с ним сделал» и просто ничего не делает, только обслуживает следующую страницу.
Если вы прочитали это далеко, СПАСИБО, и вот мой актуальный вопрос. Как я могу в своей функции JavaScript JavaScript connectCallback кросс-браузерным способом заставить кнопку удаления сработать, стать «успешной» и отправить вместе с остальными данными?