Как я могу найти кнопку, которая нажала из формы Отправить событие в jQuery?

StackOverflow https://stackoverflow.com/questions/3663464

Вопрос

У меня есть функция, которую я использую для предотвращения нескольких отступлений формы:

var submitted = false;
$(function() {
    $('form').bind('submit', function(e) {
        if (!submitted && CanSubmit(e)) {
            submitted = true;
            return true;
        } else {
            return false;
        }
    });
});

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

Обратите внимание, что я не могу связать со событиями Chick Click - см. Этот предыдущий вопрос Больше подробностей.

В Firefox я могу использовать e.originalEvent.explicitOriginalTarget, но это, по-видимому, не доступно в IE.

Как я могу получить это значение из e Параметр в кросс-браузерном способе?

Это было полезно?

Решение

На самом деле вы могли бы просто заменить $('form').bind('submit' с участием $(':submit').bind('click' и ваш код будет работать так же хорошо (и вы могли бы использовать this чтобы увидеть, что нажал).

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

Использовать e.target - jQuery нормализует его для консистенции кросс-браузера.

Ближайшая вещь, которую я мог найти для explicitOriginalTarget было document.activeElement (Для IE) - это элемент, который был сосредоточен во время события. Нет эквивалента для браузеров на основе WebKit на основе WebKit. Так что нет, нет реального перекрестного браузера, чтобы сделать это только с только объектом события.

Почему вы не развиваете функцию отправки, когда вы делаете отправку? Это гарантирует только одно представление:

$(function() {
    $('form').bind('submit', function(event) {
          // regular submit form stuff here
        ...
          // and unbind it
        $('this').unbind(event);       
    });
});

Проверить .unbind () под, «Использование объекта события»

Или, как Мэтт Бал указал в комментариях, вы можете использовать .one(), что эквивалентно вышеуказанному.

$(function() {
    $('form').one('submit', function(event) {           // <== Only executed once
          // regular submit form stuff here
        ...
    });
});

Если у вас есть $.post() или $.get() Представление формы, связанной с несколькими событиями / элементами, то вам просто необходимо убедиться, что обработчик, который заканчивается изнутри себя, используя event Объект, а затем увидите всех других обработчиков, и наоборот для каждого из этих других обработчиков. Вы можете уничтожить других обработчиков, используя Один из четырех способов разминировать обработчики событий.

Почему бы не использовать .one Функция, гарантирует его огня только один раз.

$(function() {
    $('form').one('submit', function(event) {
      // regular submit form stuff here     
    });
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top