Подтвердить что ты не робот

Есть ли лучшее решение jQuery для this.form.submit();?

Я хочу вызвать событие отправки формы, в которой находится текущий элемент. Иногда я знаю, что работает:

this.form.submit();

Мне интересно, есть ли лучшее решение, возможно, с помощью jQuery, так как я не уверен, что 100% метод работает в каждом браузере.

Edit:

Ситуация, которая у меня есть, выглядит следующим образом:

<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?

4b9b3361

Ответ 1

Я думаю, что вы ищете что-то вроде этого:

$(field).closest("form").submit();

Например, чтобы обработать событие onchange, у вас будет следующее:

$(select your fields here).change(function() {
    $(this).closest("form").submit();
});

Если по какой-либо причине вы не используете jQuery 1.3 или выше, вы можете вызвать parents вместо closest.

Ответ 2

this.form.submit();

Это, вероятно, лучший выбор. Особенно, если вы не используете jQuery в своем проекте, нет необходимости добавлять его (или любую другую JS-библиотеку) именно для этой цели.

Ответ 3

Вы всегда можете JQuery-ize в вашей форме .submit, но он может просто вызвать одно и то же:

$("form").submit(); // probably able to affect multiple forms (good or bad)

// or you can address it by ID
$("#yourFormId").submit();

Вы также можете прикрепить функции к событию отправки, но это другая концепция.

Ответ 4

Как и в ответе Matthew's, я просто обнаружил, что вы можете сделать следующее:

$(this).closest('form').submit();

Неправильно: проблема с использованием родительской функциональности заключается в том, что поле должно быть непосредственно внутри формы для работы (не внутри tds, меток и т.д.).

Я исправляюсь: родительский s (с s) также работает. спасибоs Paolo для указания этого.

Ответ 5

Я обнаружил, что с помощью jQuery лучшим решением является

$(this.form).submit()

С помощью этого оператора плагины jquery (например, плагин jquery form) работает корректно, а служебные служебные данные jQuery DOM минимизируются.

Ответ 6

Ваш вопрос в чем-то смущает тем, что вы не объясняете, что вы подразумеваете под "текущим элементом".

Если у вас есть несколько форм на странице со всеми типами входных элементов и кнопкой типа "отправить", то нажатие "enter" после заполнения любого из полей приведет к отправке этой формы. Вам не нужен Javascript.

Но если у вас есть несколько кнопок "отправить" в форме и других входных данных (например, "редактировать строку" и/или "удалить строку" в таблице), то вы можете разместить эту строку.

Другим способом (без необходимости использования Javascript) может быть присвоение разных значений всем вашим кнопкам (типа "submit" ). Вот так:

<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" и решаете, что делать.

Ответ 7

В JQuery вы можете позвонить

$("form:first").trigger("submit")

Не знаю, намного ли это лучше. Я думаю, form.submit(); является довольно универсальным.

Ответ 8

<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'];

-->