2012-06-23 4 views
9

Я пытаюсь поймать все формы отправки событий, получить URL-адрес из атрибута действия и использовать его для отправки содержимого формы на этот адрес с помощью AJAX. Так что мне нужно только одно на отправке обработчика событий. Однако я быстро попал в беду, поскольку, похоже, он не работает в IE.JQuery: on submit не работает

$(document).submit(function(e) { 
     alert('clicked'); 
     e.preventDefault(); 
    }); 

Это код, который я использую для целей кросс-браузерного тестирования. Он отлично работает в Chrome, Firefox, но не в IE. Мне не разрешено устанавливать прослушиватель событий в документе?

ответ

22

Посмотрите на API JQuery:

JavaScript представить событие не пузырь в Интернете Проводник. Тем не менее, скрипты, которые полагаются на делегирование событий с событием отправки, будут последовательно работать в разных браузерах с jQuery 1.4, что нормализовало поведение события. (api.jquery.com/submit)

submit событие не пузырь в Internet Explorer, так что document элемент никогда не будет уведомлен о submit событий. jQuery будет нормализовать это для вас, но только если вы используете делегирование событий. Это не трудно сделать, и на самом деле может сделать ваш код лучше, если есть больше сложности к нему:

$(document).on('submit', 'form', function(e) { 
    alert('clicked'); 
    e.preventDefault(); 
}); 

Это сохраняет преимущества привязки к document (например, перехват событий на элементах, которые не но существуют), делая это возможным в IE. Обратите внимание, что this, внутри обработчика событий, теперь является элементом form, а не document.

+0

В моем случае он все еще не работает в IE. Форма вытягивается с помощью ajax. – Andrew

+0

@ Andrew. Могли бы вы предоставить упрощенный, нерабочий пример? – lonesomeday

+0

не очень, но я приведу пример как можно более ясный. Если я применяю его к подарку из формы попрошайничества, он работает. Как только я начну вытягивать форму с помощью ajax, обработчик событий больше не работает. Это код, который работает (зарегистрировать обработчик события после того, как вытягивать форму):. $ ('DialogContext ') нагрузки ('/ добавить/addprojectform', функция() {\t \t \t \t \t \t \t \t $ (» форма ") на ('Submit', функция (е) { \t \t \t \t \t предупреждение ('щелкнул'); \t \t \t \t \t e.preventDefault(); \t \t \t \t}.); – Andrew

3

Присоединить слушателя к формам

$("form").submit(function(e) { 
     alert('clicked'); 
     e.preventDefault(); 
}); 
+0

хорошо, причина, по которой я зарегистрировал событие на документе, заключается в том, что я загружаю форму с помощью ajax. Поэтому мне пришлось бы регистрировать событие после каждого вытаскивания данных, не так ли? – Andrew

+0

да, вы правы, и вот как вы можете получить URL-адрес действия - http://jsfiddle.net/qSB4V/1/ –

+0

@Andrew: В этом случае использование jQuery 'on()' для привязки должно делать трюк поскольку он придает будущим элементам при использовании соответствующего переопределения. – Nope

3

насчет:

$("form").submit(function(e) { 
    alert('clicked'); 
    e.preventDefault(); 
}); 
+0

Вам нужно «предупреждение» здесь? –