Как найти кнопку, которая была нажата из события отправки формы в jquery? - PullRequest
5 голосов
/ 08 сентября 2010

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

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

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 08 сентября 2010

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

2 голосов
/ 08 сентября 2010

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

$(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, а затем отсоединить также все остальные обработчики,и наоборот для каждого из этих других обработчиков.Вы можете отменить привязку других обработчиков, используя одним из четырех способов отсоединения обработчиков событий .

2 голосов
/ 08 сентября 2010

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

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

0 голосов
/ 09 сентября 2010

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

$(function() {
    $('form').one('submit', function(event) {
      // regular submit form stuff here     
    });
});
...