Почему $.change() срабатывает при нажатии кнопки отправки?

У меня есть событие $.change(), но при нажатии кнопки отправки событие изменения срабатывает снова. Предполагается, что он срабатывает только один раз, когда текст вводится в текстовое поле ввода.

$('input:submit', top.document).bind('click', function (e) {
    alert("submitting")
});

$('input').change(function (e) {
    alert("fire");
});

person Community    schedule 11.10.2009    source источник


Ответы (3)


Изменить: по какой-либо причине событие изменения вызывается при нажатии кнопки ввода. (спасибо Энтони)

Способ исправить это — просто не нажимать кнопку отправки.

Можешь попробовать

$('input:text')

Для выбора только текстовых полей.

Или вы можете сделать

$('input:not(:submit)')

Чтобы выбрать все элементы ввода, кроме кнопки (кнопок) отправки.

О селекторах читайте здесь

Изменить: использование <button> вместо этого не сработает. Оно по-прежнему считается полем input, но его значение отделено от текста, отображаемого на кнопке.

person mpen    schedule 11.10.2009
comment
да вроде не работает. я отредактировал код там, чтобы дать больше информации. - person ; 11.10.2009

$('input').change(function(e){ alert("fire") }); применяет это событие ко ВСЕМ элементам ввода, включая <input type="submit".../>. Если вы действительно хотите, чтобы КАЖДЫЙ ОДИН элемент ввода текста имел событие изменения, вам нужно ``$('input[type=text]').change(function(e){ alert("fire") });` В противном случае, может быть лучше использовать идентификатор или класс.

person davidtbernal    schedule 11.10.2009

@Отметка,

Вы на месте, и я бы отредактировал вас, если бы мог помочь. Может быть, когда-нибудь скоро...

@айови,

Кнопки отправки являются входами. По крайней мере, большинство из них:

  <input type="submit" />

Итак, Марк, дело не в том, что они что-то делают с текстом кнопки, а в том, что ввод, который является кнопкой, изменяется при нажатии на нее.

Так что его решения были великолепны. Идти с

  $("input:text").change
person Anthony    schedule 11.10.2009
comment
На самом деле это не сработает, пробел означает потомок. Поэтому ваш селектор ищет текстовые вводы, которые являются потомками другого ввода, что вряд ли сработает. Убери пробел и все будет хорошо. - person TM.; 11.10.2009
comment
Я возражал. Я думаю, что у меня были проблемы с этим раньше, поэтому я нервничал, думая, что пространство покроет это в обоих направлениях. Спасибо за внимание. - person Anthony; 11.10.2009
comment
да, но даже с этим ... я до сих пор не понимаю, почему он выбирает ВСЕ входы. хотя я четко указал не выбирать :submit, а только :text - person h34y; 11.10.2009
comment
Вы не указываете только текст в коде, который вы предоставляете. Вы указываете select где-то еще, но это не то же самое. Мало того, что это не исключает отправку из простого селектора ввода, вы также должны помнить, что есть флажки, сбросы и радиовходы. Поэтому каждый раз нужно быть конкретным. - person Anthony; 11.10.2009