2010-07-23 6 views
0

Я не могу найти решение для этого, мне нужно переопределить предыдущий установленный обработчик событий отправки. В моем примере у меня есть страница iframe со своей собственной отправкой (которая может иметь ошибки проверки и возвращает false). Таким образом, я должен сделать:переопределить форму отправить событие с jquery (1.3.2)

$('<iframe></iframe>') 
    .load(function() { 
     content = $(this).contents() 
     form = content.find('form') 
     previous_form_submit = .... //This is my question 
     form.unbind("submit") 
     form.submit(function() { 
      var valid = previous_form_submit() 
      if (valid) { 
      $.post(form.attr('action'), form.serialize(), function(data) { 
       //do something 
      }) 
     }) 
    }) 

Edit: Для того, чтобы быть более ясным, проблема переопределить событие, но без потери предыдущего обработчика с проверкой.

Edit2: Я использую JQuery 1.3.2

Я собираюсь другого рода решения, но я чувствовал, любопытно, как можно это сделать.

Спасибо.

+0

Эти переменные («content», «form», «previous_form_submit») должны быть объявлены с помощью ключевого слова 'var'! Как сейчас, они глобальны для этой страницы! – Pointy

+0

Также: вы уже вызываете «unbind», так ваш вопрос действительно о том, как * сохранить * любой предыдущий обработчик отправки? – Pointy

+0

Да, это всего лишь выдержка из моего исходного кода. Да, я имею в виду: мне нужно переопределить текущие обработчики событий отправки с моими, но мне нужно сохранить предыдущие обработчики для проверки (в моем примере это один предыдущий обработчик). – Hugo

ответ

1

обработчики событий хранятся в хранилище Expando данных элемента, доступны .data(), в этом случае, .data('events') для обработчиков событий, то вы .submit для связанного представить обработчик, .click за клики и т.д.


JQuery 1.4+ версия:

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

var oldHandler = form​​​​​​​​.data("events").submit[0].handler; 

В противном случае вам нужно петлю через них, используя $.each(), например:

$.each(form.data("events").submit, function(i, h) {  
    var handler = h.handler; 
    //do something with handler 
}); 

JQuery версии 1.3.x:

Используя $.each(), например:

$.each(form.data("events").submit, function(i, h) {  
    var handler = h; 
    //do something with handler 
}); 

Лучше всего петли, хотя здесь, в dexes не очищаются. Обработчик не может быть первым элементом, поэтому .submit[0] может быть undefined, даже если там is обработчик.

+0

Спасибо, Ник, я использую jquery 1.3.2. – Hugo

+0

@Hugo - Обновлен, чтобы показать немного другой макет объекта в 1.3.2 :) –

+0

@Nick - Еще раз спасибо, но form.data («events») ничего не возвращает. Редактировать: form.data («events») не определено – Hugo

Смежные вопросы