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

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

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?

Метод, который вы публикуете, всегда работал у меня.

Diodeus - James MacFarlane 06.01.2009 23:54

Да, почему this.form.submit () не работает?

marcovtwout 07.08.2013 17:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
47
2
122 297
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

В 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();

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

Вопрос говорит, что он не хочет этого делать

Amala 13.03.2012 00:13

Конечно, сейчас. Это было в редактировании, которое произошло на следующий день после отправки моего ответа.

patridge 23.03.2012 18:55
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 19.12.2009 19:22

@TeKapa: Спасибо. jQuery 1.3 (который добавил функцию closest) вышел через неделю после того, как я ответил на вопрос.

Matthew Crumley 19.12.2009 19:36

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

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

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

Стою исправлюсь: parents (with an s) тоже работает. Спасибо Паоло за указание на это.

с parent ('form') то, что вы сказали, может быть правдой, но с parentS ('form') он должен работать, даже если поле находится внутри td и т. д.

Paolo Bergantino 04.04.2009 10:47

Разве родители ('form') не вернут все формы, являющиеся родителями этого элемента? Это потенциально может отправить внешнюю форму, которую вы еще не собирались отправлять.

StriplingWarrior 26.01.2011 03:40

Просто наткнулся на это и хочу добавить, что у вас не должно быть форм внутри форм. Это неверно и не будет работать в IE. Так что использование parents("form") вполне приемлемо, хотя я не знаю, насколько он эффективен по сравнению с closest("form").

ClarkeyBoy 28.07.2012 17:47
<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 минимизированы.

Другие вопросы по теме