2010-07-09 4 views
1

J'essaie d'attacher un plugin jQuery à un bouton généré dynamiquement. Je l'ai essayé ce qui suit sans succès:Quel événement/méthode jQuery puis-je utiliser pour lier un bouton dynamique avant de cliquer?

$('.myButton').live('click', function() { 
    $(this).file().choose(function(e, input) { 
     // ... 
    }); 
}); 

Je suppose que cela ne fonctionne pas comme le plug-in a besoin de liaison avant clic.

donc j'ai essayé ...

$('.myButton').load(function() { ... }); 

et (obtenir désespérée maintenant) ...

$('.myButton').live('load', function() { ... }); 

Quelle méthode puis-je utiliser pour lier un bouton nouvellement généré avant que l'utilisateur clique dessus ?

Répondre

1

Vous pouvez lier lorsque vous générez, par exemple si elle est générée par $.ajax(), il ressemblerait à ceci:

$.ajax({ 
    //options... 
    success: function(data) { 
    //do stuff 
    $(".myButton", data).file().choose(...); 
    } 
}); 

La partie importante, il est le , data, nous offrons la selector un context pour le fouiller, il est donc seulement de trouver des boutons qui ont été chargés dans le réponse. Cette même technique s'applique également aux méthodes de succès sur other $.ajax() shorthand versions.


Si ce n'est pas une option, il existe une route non-performante disponible. Vous pouvez utiliser the .livequery() plugin qui recherche activement et agit sur de nouveaux éléments, quelle que soit la source. Votre code ressemblerait à ceci dans ce cas:

$(".myButton").livequery(function() { 
    $(this).file().choose(...); 
}); 
1

vous devez ajouter le code:

$('.myButton').live('click', function() { 
     $(this).file().choose(function(e, input) { 
     // ... 
     }); 
    }); 

Après avoir ajouté dynamiquement votre bouton (donc en gros ajouter dans la routine qui ajoute la touche dynamique).

jim

+0

c'est un bon point. Pensez-vous que je devrais le faire avec tout mon contenu dynamique au lieu d'utiliser live()? – fearofawhackplanet

+0

fearofawhackplanet - Je pense que l'utilisation de .livequery par nick devrait trier la plupart des cas de bords que vous rencontrez et où ce n'est pas approprié, alors faites-le dans la routine dynamique. –