2010-11-10 20 views
6

J'utilise le plugin JEditable pour l'édition sur place.Rendre JEditable travailler sur de nouveaux éléments (.live)

J'ai une fonction "setup" qui appelle .editable() sur toutes les classes concernées. Le problème est que j'ai des éléments nouvellement ajoutés que je voudrais aussi éditer. Évidemment, étant nouvellement ajouté, .editable() ne reçoit jamais d'appels. En d'autres termes, je cherche à obtenir l'effet que la fonction live() de jquery fait, mais pour la fonction editable().

Ma solution actuelle me semble un peu laid (redscribe_button est le bouton qui doit être cliqué pour modifier le texte):

$(".redescribe_button").live("click", function(click_event) { 
    click_event.preventDefault(); 

    $(".editable", $(this).parent().parent()).editable("/temp/", { 
     event: "make_editable", 
     indicator : 'Saving...', 
     tooltip : 'Click to edit...' 
    }); 

    $(".editable", $(this).parent().parent()).trigger('make_editable'); 
}); 

En d'autres termes, je suis juste appeler .editable chaque fois que l'édition le bouton est cliqué.

Des idées pour une meilleure solution?

Répondre

3

Appeler modifiable plus d'une fois sur un élément n'a pas d'effets secondaires indésirables, non? Alors pourquoi ne pas simplement refaire l'installation chaque fois que quelque chose change.

+0

C'est effectivement ce que je fais, sauf qu'au lieu de le refaire pour tout le monde, je suis en train de le refaire (ou de le faire pour la première fois) sur l'élément qui vient d'être cliqué. Pourtant, il se sent un peu mal. –

+1

Cela fonctionne, et il maintient le code sympa et bien rangé. Ce n'est pas cassé, donc pas besoin de le réparer. –

5

Je suis juste venu à cette question aussi bien et l'ai résolu d'une manière plus élégante (IMHO).

$('.jqEdit').live('click',function(event) { 
    event.preventDefault(); 
    $(this).editable('save.php') 
});