Функция jQuery submit(), не вызывающая отправку

#jquery

#jquery

Вопрос:

У меня есть форма, подобная этой…

 <form action="/tags/3" class="edit_tag" id="edit_tag_3" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="_method" type="hidden" value="put" />
  </div> 
  <input class="tag_form_field" id="tag_name" maxlength="255" name="tag[name]" size="42" type="text" value="" /> 
</form>
  

И я пытаюсь отправить это следующим образом…

 $('.tag_form_field').change(function() {
  $(event.target).closest('form').submit();
});
  

Когда я изменяю входные данные, форма не отправляется. Ничего не происходит — ошибки нет.

Я знаю, что селектор и обработчик onChange () оба работают. Я протестировал их, заменив submit() на функцию jQuery css() , и она отлично работала.

Я протестировал ее в Safari и Chrome на OS X с тем же результатом.

Есть идеи?

Спасибо.


Я тоже пробовал это с тем же результатом…

 $('.tag_form_field').change(function() {
  $(this).closest('form').submit();
});

$('.tag_form_field').change(function(e) {
  $(e.target).closest('form').submit();
});

$('.tag_form_field').change(function() {
  $(this).closest('form').submit();
});

$('.tag_form_field').change(function() {
  $(this).closest('form')[0].submit();
});
  

Ответ №1:

Попробуйте $(this).closest('form.edit_tag')[0].submit();

В противном случае это просто запускает submit событие в форме.

Комментарии:

1. Спасибо. Но я хочу запустить событие отправки в форме. Это цель. Не могли бы вы уточнить?

Ответ №2:

Интересно. Можете ли вы попробовать сформулировать это таким образом:

 $('.tag_form_field').change(function(e){
    $(e.target).closest('form.edit_tag').submit();
});
  

jQuery должен позаботиться о правильной инкапсуляции event объекта для вас, независимо от браузера.

Кроме того, я склонен думать, что у вас, возможно, не может быть a form внутри a form , поэтому не должно быть необходимости специально выбирать «форму с классом edit_tag «, не так ли? Вероятно, просто $(this).closest('form') должно быть достаточно?

Комментарии:

1. Или просто $(this) . И вы правы, вложенные формы не имеют особого смысла.

2. Хороший улов. Изменено, чтобы вставить это.

3. Как мне получить вложенную форму? Я думаю, что у меня там только одна форма. Я пробовал это с помощью $(this) , $(this)[0] и $(event.target) и т.д. Смотрите обновленный код выше. В любом случае, селектор работает нормально — как уже упоминалось, я тестировал его с другой функцией jQuery, и она выполняет свою работу. Форма просто не будет отправляться.

4. Если у вас есть только одна форма, то $('form').submit() одна должна выполнить трюк, без .closest() вызова. Хотя, если селекторы работают нормально, как вы говорите, я сомневаюсь, что это что-то изменит.

5. Возможно, это может быть что-то настолько тривиальное, как убедиться, что ваш целевой объект form действительно указывает на реальную, действительную страницу? «теги / 3» звучит сомнительно, даже если вы используете маршруты MVC. Изменится ли что-нибудь, если вы на самом деле введете туда абсолютный путь (например http://my.domain.com/tags/3 )?