#javascript #jquery #post #pageload
#javascript #jquery #Публикация #загрузка страницы
Вопрос:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
submitForm($("#login-user-one"));
});
function submitForm(form) {
console.log($(form).attr("method"));
$(form).submit();
};
</script>
</head>
<body>
<form id="login-user-one" name="login" method="POST" action="/test.html">
<input name="userid" tabindex="1" value="MyUser">
<input name="pass" type="password" tabindex="2" value="MyPass">
<input type="submit" name="submit" value="1" tabindex="3">
</form>
</body>
</html>
Я не могу понять, почему вышеупомянутое не работает. Журнал показывает мне значение POST, и все же он не будет отправлен. В консоли нет ошибок.
JS Fiddle: https://jsfiddle.net/t48hk9qx /
Комментарии:
1. Проблема не в этом, но вы уже передаете объект jQuery в
submitForm
, вам не нужно переносить его$(...)
снова2. @Phil ты знаешь, в чем проблема?
3. Редко можно отправить форму POST в
.html
файл. Фактически, некоторые веб-серверы отклоняют такой запрос4. @Phil это поддельный URL … вы можете изменить его на что угодно, и он все равно не будет работать.
Ответ №1:
Ну, это что-то новенькое для меня.
Поскольку в вашей форме есть именованный элемент с name="submit"
, ссылка на этот элемент заменяет HTMLFormElement.prototype.submit()
функцию.
Из документации…
Именованные входные данные добавляются к экземпляру формы их владельца в качестве свойств и могут перезаписывать собственные свойства, если у них одинаковое имя (например, форма с именем ввода
action
будет иметь своеaction
свойство возвращать этот ввод вместоaction
HTML-атрибута формы).
jQuery пытается выполнить эту функцию при программной отправке формы с чем-то вроде
if (typeof element.submit === 'function') {
element.submit()
}
Но в вашем случае element.submit
это HTMLInputElement
.
Быстрое и простое решение: переименуйте свой элемент submit или, как это чаще встречается в формах с одной кнопкой, просто удалите name
атрибут.
Если вы должны сохранить кнопку отправки с именем «submit», это, кажется, работает
function submitForm(form) {
// note, "form" is already a jQuery object
console.log(form.attr("method"));
HTMLFormElement.prototype.submit.call(form[0])
}
Ответ №2:
Удаление name = submit из вашего ввода решит проблему. https://codesandbox.io/s/64kl2l3wvk. Я думаю, потому что функция form.submit заменена на ввод с name = submit.