2012-09-05 6 views
0

L'utilisation de la fonction suivante permet de capturer deux soumissions de formulaire générées dynamiquement, mais n'empêche pas leur soumission.Le délégué ne fonctionne pas comme prévu

$('body').delegate('.edit_faq, .new_faq', 'submit', function(e){ 
     e.preventDefault(); 
     //voodoo 
    }); 

j'utilisais ce qui suit, en utilisant live. Cela fonctionne, mais le live est déprécié et le résultat final est que ce code se retrouve dans un plugin flexible.

$('.edit_faq').add('.new_faq').live('submit', function(e){ 
    e.preventDefault(); 
    //magic 
}); 
+0

Cela devrait fonctionner. Quelle version de jquery utilisez-vous et quel navigateur? Un exemple sur jsfiddle rendrait la réponse plus facile, et faire un test peut révéler des erreurs. – SoonDead

+0

jquery 1.7.2, chrome 21 –

Répondre

1

Ce que vous avez écrit fonctionne réellement.

chèque:

http://jsfiddle.net/peuqU/

course de presse jsFiddle a parfois besoin d'un rafraîchissement avant de tester soumet.

Je n'ai pu le tester avec du chrome 23.

+0

cela casse un peu quand dynamiquement ajouté - http://jsfiddle.net/yF3pA/1/ –

+1

bien puisque l'étiquette d'entrée n'a pas été fermée, elle s'est cassée. http://jsfiddle.net/yF3pA/3/. – SoonDead

0

Essayez sur qui est la méthode recommandée, et return false:

$('body').on('submit', '.edit_faq, .new_faq', function(e){ 
     e.preventDefault(); 
    //Do your stuff here. 

    }); 

Quant à savoir pourquoi la soumission se produit encore, peut-être vous avez une erreur JS quelque part dans la page?

+0

Pourquoi retourner false et preventDefault? –

+0

Voir ici: http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false –

+0

Cela ne fonctionne pas. En outre, ce lien clarifie que dans ce cas, 'return false' n'est pas nécessaire, comme je le soupçonnais. –

0

FIXED--

Le problème est que le code requis étant enveloppé sur un document onReady:

$(document).ready(function(){ 
    $('body').on('submit', '.edit_faq, .new_faq', function(e){ 
     e.preventDefault(); 
     //voodoo 
    }); 
}) 

I se produit à moi que, puisque vivre n'a pas besoin de prêt, que c'est peut-être encore faux?

+0

c'est la solution. aussi live nécessite document.ready aussi si je me souviens bien. – SoonDead

+0

Dans la première, vous associez les gestionnaires d'événements à 'body' qui n'existe probablement qu'après le chargement du contenu DOM. Dans la seconde, les gestionnaires sont attachés au 'document' lui-même. – Dennis

+0

SO, je peux contourner le besoin d'onready en attachant à $ (document)? –

Questions connexes