Ajouter un atsortingbut onclick dans le code après l’appel de la fonction javascript avec le paramètre de chaîne faisant référence à ClientID

J’ai regardé autour de moi et je n’arrive pas à trouver toutes les pièces dont j’ai besoin pour mettre cela en place. Le problème est que je veux appeler la même fonction javascript à partir de plusieurs endroits. Je dois donc passer l’ID de l’élément dans la fonction pour pouvoir toutes les changer. L’idée est très simple. Je veux juste que quatre cases à cocher appellent cette fonction lorsque vous cliquez dessus afin d’éviter que la dernière case ne soit décochée. Voici ce que j’ai jusqu’à présent.

HTML:

     

C #:

 protected void Page_Load(object sender, EventArgs e) { cbBlue.Atsortingbutes.Add("onclick", "checkCheck(" + this.ClientID + ")"); cbGreen.Atsortingbutes.Add("onclick", "checkCheck(" + this.ClientID + ")"); cbRed.Atsortingbutes.Add("onclick", "checkCheck(" + this.ClientID + ")"); cbYellow.Atsortingbutes.Add("onclick", "checkCheck(" + this.ClientID + ")"); } 

Javascript:

 function checkCheck(elementID) { if ($('#').val() == 1) { elementID.prop("checked", true); return; } else { if (elementID.is(":checked")) { elementID.prop("checked", false); $('#').val($('#').val() - 1); } else { elementID.prop("checked", true); $('#').val($('#').val() + 1); } } } 

Est-ce possible? Est-ce que je suis proche? De plus, je ne suis pas sûr de savoir si je dois définir l’état des cases cochées dans le javascript, car je suppose que cela a déjà été traité ailleurs. Mais ensuite, je ne suis pas sûr de savoir si le forcer à true fonctionnerait, car il pourrait toujours être décoché après l’exécution de la fonction javascript.

Étant donné qu’aucune donnée n’est réellement transmise au backend, je vous recommande de le faire entièrement en javascript. Depuis que je vois que vous utilisez jQuery, voici ce que je vous recommande de faire.

Tout d’abord, append une classe à toutes les cases à cocher

     

Ensuite, en utilisant jQuery pour lier l’événement onclick

 $(function(){ //bind event $('.keepOneChecked').click(function(e){ //get all the checkboxes that ARE checked //.keepOneChecked is applied to a span wrapping the input and label because of ASP var $checked = $('.keepOneChecked input:checked'); if( $checked.length == 1){ //if there is only 1, disable it so you can't uncheck it $checked.attr('disabled',true); } else{ //otherwise a second or more just got checked so enable all of them $checked.attr('disabled',false); } }); }); 

Quant à la question que vous rencontrez spécifiquement, je pense que lorsque vous êtes contraignant

 cbRed.Atsortingbutes.Add("onclick", "checkCheck('#<%=this.ClientID%>')"); 

“this” est référé à la page au lieu de l’élément, plus la syntaxe est fausse. Tu pourrais essayer:

 cbRed.Atsortingbutes.Add("onclick", "checkCheck('"+cbRed.ClientID+"')"); 

Et voyez si cela fonctionne, mais j’essaierais de le faire en premier seulement avec jQuery.