2010-07-23 7 views
0

Je ne trouve pas de solution pour cela, je dois redéfinir un gestionnaire d'événement submit précédemment défini. Dans mon exemple, j'ai une page iframe, avec leur propre submit (qui peut avoir des erreurs de validation, et retourner false). Donc, je dois faire:événement de soumission de formulaire redondant avec 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: Pour être plus clair, le problème est passer outre l'événement, mais sans perdre gestionnaire précédent avec validation.

Edit2: J'utilise jquery 1.3.2

Je vais à un autre type de solution, mais je me sentais curieux de savoir comment peut le faire.

Merci.

+0

ces variables ("content", "form", "previous_form_submit") doivent toutes être déclarées avec le mot clé 'var'! Comme c'est maintenant, ils sont globaux à la page! – Pointy

+0

Aussi: vous appelez déjà "unbind", alors votre question est vraiment de savoir comment * enregistrer * n'importe quel gestionnaire de soumission précédent? – Pointy

+0

Oui, est juste un extrait de mon code original. Oui, je veux dire: je dois remplacer les gestionnaires d'événements de soumission actuels par les miens, mais j'ai besoin de sauvegarder les gestionnaires précédents, pour la validation (dans mon exemple, il y a un gestionnaire précédent). – Hugo

Répondre

1

Les gestionnaires d'événements sont stockés dans le magasin de données expando de l'élément, accessible par .data(), dans ce cas, .data('events') pour les gestionnaires d'événements, alors vous faites .submit pour lié soumettre les gestionnaires, .click pour les clics, etc.


jQuery version de:

Si le formulaire avait un gestionnaire soumettre ce serait ressembler à ceci:

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

Sinon, vous devez faire une boucle à travers eux, en utilisant un $.each() par exemple:

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

jQuery version 1.3.x:

L'utilisation d'un $.each() par exemple:

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

Il est préférable de faire une boucle ici, comme dans le les dexes ne sont pas nettoyés. Un gestionnaire peut ne pas être le premier élément, donc .submit[0] peut être undefined, même si est un gestionnaire.

+0

Merci Nick, j'utilise jquery 1.3.2. – Hugo

+0

@Hugo - Mise à jour pour montrer la disposition des objets légèrement différente dans 1.3.2 :) –

+0

@Nick - Merci encore, mais form.data ("events") ne renvoie rien. Editer: form.data ("events") est indéfini – Hugo

Questions connexes