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