2010-04-06 6 views
4

Donc aujourd'hui je viens de rencontrer la fonction 'live()' qui lie tous les éléments futurs et passés à l'événement que vous choisissez, comme 'onclick'.Jquery sélecteur css persistant équivalent à '.live()'

En ce moment je suis d'avoir à mettre en place des boutons comme suit chaque fois que je charge un nouveau bouton via ajax ...

$('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
$('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
$('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 

Ainsi, au lieu d'appeler ces lignes chaque fois que je l'utilise pour ajouter ajax un nouveau bouton, y a-t-il une manière similaire de dire à JQuery de configurer mes boutons? TOUT ce que j'en rajoute?

Merci pour toute aide!

Répondre

2

Mmh pas vraiment. Mais il y a la fonction .ajaxSuccess() qui est déclenchée chaque fois qu'un appel Ajax est réussi. Ainsi, vous pouvez faire:

$('body').ajaxSuccess(function() { 
    $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
    $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
    $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 
}); 

Mais cela fonctionnera sur tous les liens avec les classes, non seulement sur les nouveaux. Mais si vous les ajoutez à une heure (c'est-à-dire pas plusieurs fois a.btn.plus), vous pouvez utiliser le sélecteur :last (a.btn.plus:last).


Vous pouvez également créer une fonction et juste que de vos fonctions de rappel:

function links() { 
    $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
    $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
    $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 
} 

et dans l'appel Ajax:

$.ajax({ 
    //... 
    success: function(msg){ 
     links(); 
    } 
}); 

De cette façon, vous pouvez passer l'élément parent la fonction afin de trouver le lien uniquement à l'intérieur de cet élément (donc le code ne fonctionnerait que sur les nouveaux liens).


Une dernière option serait de générer un événement personnalisé mais à la fin ce serait semblable à faire juste un appel de fonction dans votre cas si vous gagnez pas beaucoup.

+0

hey chat, merci pour le conseil! L'utilisation du succès ajax pour mettre à jour les boutons ressemble à ma meilleure option en ce moment. – uberdanzik

1

Vous pouvez utiliser délégué dans votre fonction de succès trop

$("body").delegate("a.btn", "hover", function(){ 
$(this).toggleClass("hover"); 
}); 
+0

D'une certaine façon, je ne peux pas associer votre réponse à la question du PO. Comment est-ce lié à la génération d'un bouton? –

+0

description "delegate": Associez un gestionnaire à un ou plusieurs événements pour tous les éléments qui correspondent au sélecteur, maintenant ou dans le futur, en fonction d'un ensemble spécifique d'éléments racine. Je ne sais pas vraiment comment l'utiliser pour le moment, mais le mot «futur» me donne envie d'essayer des expériences dans l'espoir de faire vraiment ce que je pense. – uberdanzik

+0

en fait, je pense que c'est exactement ce que je cherchais ..."Délégué est une alternative à l'utilisation de la méthode .live(), permettant à chaque liaison de la délégation d'événements à des éléments DOM spécifiques." – uberdanzik

0

Il y a un plugin appelé Jquery livequery qui couvre vos besoins.

Je me plais à penser de ce plugin comme Jquery .live() mais sans la nécessité d'un événement (clic), etc.

Vous pouvez trouver plus d'informations ici //

Jquery - Live Query Plugin