2009-10-11 11 views
2

En utilisant ce plugin: http://www.fyneworks.com/jquery/star-rating/#tab-TestingJquery plugin étoiles et annuler bouton note

J'ai une simple fonction de rappel qui prend l'identifiant des boutons radio:

<input type="radio" class="auto-submit-star {split:2}" id="myid" value="1" /> 

$('.auto-submit-star').rating({ 
    callback: function(value, link){ 
    alert($(this).attr('id')); 
    } 
}); 

Cela fonctionne très bien, mais si le l'utilisateur clique sur le bouton d'annulation, puis il ne peut pas lire l'identifiant de celui-ci.

Dans les js, je pense que le bouton d'annulation est ajouté de manière dynamique avec:

control.cancel = $('<div class="rating-cancel"><a title="' + control.cancel + '">' + control.cancelValue + '</a></div>') 

Si j'ajoute un identifiant à comme ceci:

control.cancel = $('<div class="rating-cancel"><a id="someid" title="' + control.cancel + '">' + control.cancelValue + '</a></div>') 

Comment pourrais-je lire l'id? Ce serait indéfini. Je peux définir une classe et utiliser $ ('. Myclass'). Attr ('id') mais j'aurai plusieurs notes sur une page, donc j'ai besoin de quelque chose de similaire à "this". Ou est-il possible que le bouton d'annulation prenne l'identifiant des boutons radio correspondants?

Répondre

2

Si le id n'est pas défini, alors vous savez qu'ils ont cliqué sur le bouton Annuler. Pas besoin de définir un id pour cela.

if (typeof $(this).attr('id') == 'undefined') {...} 
+0

La raison pour laquelle je dois récupérer l'identifiant est de le transmettre à ma base de données. Il y aura également plus d'une note par page. Ainsi, par exemple, si j'ai 3 notes sur une page, et que l'utilisateur clique sur le bouton d'annulation de la 2ème note, je devrais savoir que c'était sur le 2ème jeu et que j'aurais besoin de cet identifiant spécifique pour l'insérer dans un colonnes. J'espère que vous comprenez ce que je veux dire. – Roger

0

Ok Roger - Je l'ai trouvé parce que je faisais face au même problème EXACT. Voici comment je l'ai résolu pour l'instant. J'espère que le plugin sera réparé dans le futur. J'ai l'impression que vous n'avez pas besoin de régler le problème à ce stade, mais cela pourrait aider d'autres personnes. Évidemment, cela dépend de la structure des éléments DOM, ce qui n'est pas une solution très élégante.

//RYAN OBEROI: A big hack, since the cancel callback does not have the appropriate information 
name = $(this).parent().next().attr('name') 

// click callback, as requested here: http://plugins.jquery.com/node/1655 
if(control.callback) control.callback.apply(input[0], [input.val(), $('a', control.current)[0], name]);// callback event 
0

Merci Ryan! J'ai ajouté l'événement click classe de notation d'annulation de ce qui a fonctionné pour moi

jQuery(".rating-cancel").click(function() { 
     var name = jQuery(this).parent().next().attr('name'); 
     if (name != "") { 
      //added the custom code here to handle rating cancel event 
     } 
     }); 
0

Ceci est un bug dans le plugin. Il existe un correctif here.