2010-04-09 11 views
1

J'ai un contrôle RadioButtonList et je voudrais faire un Javascript "confirmer" quand un utilisateur essaie de changer l'index. Actuellement, AutoPostBack est défini sur TRUE. Je peux, bien sûr, appeler simplement __doPostBack depuis une fonction javascript, etc. J'ai essayé quelques choses avec jQuery mais vous devez vous inquiéter de mousedown vs click et il y a toujours le fait que vous pouvez cliquer sur l'étiquette de la case à cocher pour sélectionner il, etc. Quelqu'un at-il une bonne solution pour cela?JavaScript "confirm" sur SelectedIndexChange de RadioButtonList

Pour être clair, je cherche un moyen d'inviter l'utilisateur avec une boîte de confirmation avant que leur sélection soit faite et de déclencher une publication. Pourquoi ne pas utiliser l'événement de clic?

Répondre

2

C'est ainsi que l'événement de publication côté client est lié. Par exemple, étant donné un RadioButtonList appelé "MyButtonList," le code HTML suivant est rendu:

<table id="MyButtonList" border="0"> 
    <tr> 
    <td><input id="MyButtonList_0" type="radio" name="MyButtonList" value="1" checked="checked" /><label for="MyButtonList_0">Hello World</label></td> 
    </tr><tr> 
    <td><input id="MyButtonList_1" type="radio" name="MyButtonList" value="2" onclick="javascript:setTimeout('__doPostBack(\'MyButtonList$1\',\'\')', 0)" /><label for="MyButtonList_1">Hello World 2</label></td> 
    </tr> 
</table> 

Le code jQuery suivant alors accomplir ce que vous voulez:

ÉDITÉ pour soutenir IE

var rbList = $("input[name='MyButtonList']"); 
var checkedRB = rbList.filter(":checked"); 


rbList.filter(":not(:checked)").each(function() { 
    var origClick = this.onclick; 
    this.onclick = null; 

    $(this).click(function (evt) { 
     if(confirm("Post back?")) 
     { 
      origClick(); 
     } 
     else 
     { 
      if(evt.preventDefault) { evt.preventDefault(); } 
      evt.returnValue = false; 

      checkedRB.attr("checked",true);      
     }   
    });  
}); 
+0

J'avais un code similaire. Le problème est que même si vous appuyez sur "annuler" sur le "confirmer", le bouton radio est toujours sélectionné. Cela n'empêche pas réellement la sélection. –

+0

Désolé, j'ai mal compris cette exigence aussi. Voir mon code modifié. Vous pouvez utiliser evt.preventDefault() pour annuler la sélection du bouton – zincorp

+0

J'ai remarqué que IE gère l'annulation d'un clic radiobutton un peu différemment de FireFox. Au lieu de cela, vous devrez stocker le bouton actuellement coché (le cas échéant) et le restaurer si elles annulent le clic d'un autre. Essayez le code nouvellement modifié. – zincorp

Questions connexes