Я хочу вызвать событие отправки формы, в которой находится текущий элемент. Я знаю, что иногда срабатывает следующий метод:
this.form.submit();
Мне интересно, есть ли лучшее решение, возможно, с использованием jQuery, поскольку я не уверен на 100%, что этот метод работает в каждом браузере.
Редактировать:
Ситуация у меня следующая:
<form method = "get">
<p><label>Field Label
<select onchange = "this.form.submit();">
<option value = "blah">Blah</option>
....
</select></label>
</p>
</form>
Я хочу иметь возможность отправить форму о замене <select>.
Я ищу решение, которое работает с любым полем в любой форме, не зная идентификатора или имени в форме. $('form:first') и $('form') не будут работать, потому что форма может быть третьей на странице. Кроме того, я уже использую jQuery на сайте, поэтому немного использовать jQuery не составляет большого труда.
Итак, есть ли способ получить jQuery форму, в которой находится input / select / textarea?
Да, почему this.form.submit () не работает?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В JQuery вы можете вызвать
$("form:first").trigger("submit")
Не знаю, намного ли это лучше. Я думаю, что form.submit (); довольно универсален.
Вы всегда можете JQuery-ize your form.submit, но он может просто вызывать то же самое:
$("form").submit(); // probably able to affect multiple forms (good or bad)
// or you can address it by ID
$("#yourFormId").submit();
Вы также можете использовать функции прикреплять для события отправки, но это другая концепция.
Вопрос говорит, что он не хочет этого делать
Конечно, сейчас. Это было в редактировании, которое произошло на следующий день после отправки моего ответа.
this.form.submit();
Вероятно, это ваш лучший выбор. Особенно, если вы еще не используете jQuery в своем проекте, нет необходимости добавлять его (или любую другую библиотеку JS) только для этой цели.
Ваш вопрос несколько сбивает с толку тем, что вы не объясняете, что вы подразумеваете под «текущим элементом».
Если у вас есть несколько форм на странице со всеми типами элементов ввода и кнопкой типа «отправить», то нажатие «ввода» при заполнении любого из его полей вызовет отправку этой формы. Здесь вам не нужен Javascript.
Но если у вас есть несколько кнопок «отправить» в форме и нет других входных данных (например, кнопки «изменить строку» и / или «удалить строку» в таблице), то отправленная вами строка может быть способом сделать это.
Другой способ (без использования Javascript) может заключаться в присвоении разных значений всем вашим кнопкам (которые имеют тип «отправить»). Как это:
<form action = "...">
<input type = "hidden" name = "rowId" value = "...">
<button type = "submit" name = "myaction" value = "edit">Edit</button>
<button type = "submit" name = "myaction" value = "delete">Delete</button>
</form>
Когда вы нажимаете кнопку, будет отправлена только форма, содержащая кнопку, и будет отправлено только значение кнопки, которую вы нажали (вместе с другими входными значениями).
Затем на сервере вы просто читаете значение переменной «myaction» и решаете, что делать.
Я думаю, что вы ищете что-то вроде этого:
$(field).closest("form").submit();
Например, для обработки события onchange у вас будет следующее:
$(select your fields here).change(function() {
$(this).closest("form").submit();
});
Если по какой-то причине вы не используете jQuery 1.3 или выше, вы можете вызвать parents вместо closest.
используйте ближайший («форма») вместо «родителей» («форма»). parent () получает всех родителей элемента, которые являются формами, closest () останавливает прием первой формы, которая является родительской для элемента
@TeKapa: Спасибо. jQuery 1.3 (который добавил функцию closest) вышел через неделю после того, как я ответил на вопрос.
Как и в случае с ответом Мэтью, я только что обнаружил, что вы можете делать следующее:
$(this).closest('form').submit();
Неправильно: проблема с использованием родительской функции заключается в том, что для работы поле должно находиться непосредственно внутри формы (а не внутри tds, меток и т. д.).
Стою исправлюсь: parents (with an s) тоже работает. Спасибо Паоло за указание на это.
с parent ('form') то, что вы сказали, может быть правдой, но с parentS ('form') он должен работать, даже если поле находится внутри td и т. д.
Разве родители ('form') не вернут все формы, являющиеся родителями этого элемента? Это потенциально может отправить внешнюю форму, которую вы еще не собирались отправлять.
Просто наткнулся на это и хочу добавить, что у вас не должно быть форм внутри форм. Это неверно и не будет работать в IE. Так что использование parents("form") вполне приемлемо, хотя я не знаю, насколько он эффективен по сравнению с closest("form").
<form method = "get">
<p><label>Field Label
<select onchange = "this.form.submit();">
<option value = "blah">Blah</option>
....
</select>
</label>
</p>
**<!-- <input name = "submit" type = "submit" /> // name = "submit_new_name" -->**
</form>
<!--
this.form.submit == this.form.elements['submit'];
-->
Я обнаружил, что с помощью jQuery лучшим решением является
$(this.form).submit()
Используя этот оператор, плагины jquery (например, плагин формы jquery) работают правильно, а накладные расходы на обход jquery DOM минимизированы.
Метод, который вы публикуете, всегда работал у меня.