jquery form submit() не работает внутри функции обратного вызова после предотвращения нормальной отправки при использовании экспромта
Я показываю запрос пароля вместо отправки формы, когда пользователь нажимает кнопку отправки формы. Я хочу отправить форму, когда пользователь нажимает кнопку "ОК" в приглашении. Я использую плагин импровизированной jquery (пробовал как с версией 3.1 и 4.0.1). Я спешу и не понимаю, что не так с моим кодом, или я что-то упускаю полностью.
Вот мой код -
Испытание 1
HTML часть
<form name="frmAddAdnetworkTemplate" id="frmAddAdnetworkTemplate" action="someAction">
...
...
<input id="submit" type="submit" name="submit" value="Submit" onclick="return promptPassword();" />
</form>
Часть Javascript
function promptPassword()
{
/*prepared passwordForm = some html; here */
$.prompt(passwordForm,{ buttons: { Ok:, Cancel: false , submit: }, callback: submitPasswordPrompt, focus: 1});
return false; //so as to not submit the form
}
function submitPasswordPrompt(value,m,form)
{
$("form#frmAddAdnetworkTemplate").submit(); //this does not work - no js error as well
}
Но форма не отправляется.
Пробная версия 1.1 Вместо вызова submitPasswordPrompt при отправке,
function promptPassword()
{
$.prompt(passwordForm,{ buttons:
{ Ok: $("#frmAddAdnetworkTemplate").submit(), //this too does not work
Cancel: false },
focus: 1
});
}
Испытание 1.2
Я пытался с помощью protectDefault () -
HTML часть
<input id="submit" type="submit" name="submit" value="Submit" onclick="promptPassword(event);"/>
Часть Javascript
function promptPassword(e)
{
e.preventDefault();
$.prompt(passwordForm,{ buttons: { Ok: true, Cancel: false }, submit: submitPasswordPrompt});
function submitPasswordPromptTest(e, value,m,form)
{
if(value)
{
$("#frmAddAdnetworkTemplate").submit(); //does not work
}
}
Пробная версия 2 Я также пытался вызвать $.prompt внутри документа документа.ready, связав его с событием click на кнопке отправки -
HTML часть
<input id="submit" type="submit" name="submit" value="Submit" />
Часть Javascript
$("#submit").click(function(){
$.prompt(passwordForm,{ buttons: { Ok: $("#frmAddAdnetworkTemplate").submit(), Cancel: false }});
return false;
});
Получил эту ошибку, когда я попытался $("#frmAddAdnetworkTemplate"). Off('submit'). Submit(); -
e[h] is not a function
3 ответа
Проблема вызвана id="submit", по какой-то причине это смешивается с HTML submit. У меня была эта проблема раньше, и ответ - изменить идентификатор и имя (чтобы быть в безопасности) на что-то другое:
<input id="my-form-submit" type="submit" name="my-form-submit" value="Submit" />
Используйте идентификатор кнопки для отправки
для моего сенарио
$.prompt(msg, {
buttons: btns,
submit: function (v) {
//this is simple pre submit validation, the submit function
//return true to proceed to the callback, or false to take
//no further action, the prompt will stay open.
},
callback: function (e, v, m, f) {
if (v) {
$("#MainContent_HiddenFieldIsContinueWithSave").val('1');
$("#MainContent_buttonSave").submit();
}
else { }
}
});
Смешивание встроенного Javascript с функциями и событиями jQuery затрудняет отслеживание.
Ваша попытка "Пробная версия 1.2" не работает, потому что нет переменной "event", определенной в onclick="promptPassword(event);"
и promptPassword()
функция не принимает никаких аргументов для этого. Поэтому вы не можете использовать e.preventDefault()
как e
не определен (как объект jQuery).
Однако, используя jQuery, вы можете привязать событие отправки форм, чтобы перехватить все типы отправок. т.е. при использовании клавиши ввода или нажатии кнопки отправки.
$(document).ready(function() {
$('#myForm').submit(function(event) {
var password = "password",
promptText = "Password required",
isAuthenticated = (password == prompt(promptText));
if (!isAuthenticated) {
event.preventDefault();
//console.log("Invalid password");
}
});
});
Посмотреть демо.