2010-04-06 14 views
14

Ho due moduli, uno con un pulsante di opzione che gli utenti devono selezionare per modificare.Come deselezionare Un pulsante di scelta

[form name="A"] 
<li>[input type="radio" name="BookItem" value="1" /]</li> 
<li>[input type="radio" name="BookItem" value="2" /]</li> 
<li>[input type="radio" name="BookItem" value="3" /]</li> 
[form]<p> 

Dopo "BookItem" è scelto tra forma (A) chiamo la funzione $("#EditFormWrapper").load("callEditData.cfm? ID="+ID); per caricare il secondo modulo (B)

<div id="EditFormWrapper"><div></p> 
<!---// begin dynamic form generated by external file callEditData.cfm //---> 
[form id="editForm" name="B"] 
<ul class="hourswrapper"> 
<li><input type="checkbox" id="TOR2Hours" class="TOR2Hours" name="TOR2Hours" value="AM2Hrs1" /> 2 Hours AM</li> 
<li><input type="checkbox" id="TOR2Hours" class="TOR2Hours" name="TOR2Hours" value="PM2Hrs1" /> 2 Hours PM</li> 
<li><input type="checkbox" id="TOR2Hours" class="TOR2Hours" name="TOR2Hours" value="AM2Hrs2" /> 2 Hours AM</li> 
<li><input type="checkbox" id="TOR2Hours" class="TOR2Hours" name="TOR2Hours" value="PM2Hrs2" /> 2 Hours PM</li> 
</ul> 
[input type="image" src="images/submit-btn.gif" id="addBTN" name="addBTN" class="buttons" alt="SubmitRrequest" /] 
[input type="image" src="images/cancel-btn.gif" id="editBTNcancel" name="editBTNcancel" class="buttons" alt="Cancel Request" /] 
[/form] 
<!---// end dynamic form from external file //---> 

voglio deselezionare il pulsante sulla forma (A) quando l'utente fa clic sul pulsante Annulla (editBTNcancel) nel modulo (B).

Ecco il mio script:

$("#editBTNcancel").live("click", function(event){ 
    event.preventDefault(); 
    $("#EditFormWrapper").slideUp("fast").empty(); 
    //$('.TOR2Hours').removeAttr('checked'); 
    $('.TOR2Hours').attr('checked', false); 
}); 

Spero di indicare chiaramente il mio problema, ogni suggerimento sarebbe molto apprezzato!

+0

puoi pubblicare il codice HTML contenente i pulsanti di opzione. '.removeAttr ('checked')' e '.attr ('checked', false)' entrambi funzionano per me. http://jsfiddle.net/JAEsd/ Inoltre, su quale browser li stai testando? – Anurag

+0

Si prega di ripubblicare il codice come HTML, non come codice BB –

+0

'$ (radio) .attr ('checked', false)' è corretto e funziona per me. Sei sicuro di aver selezionato gli elementi giusti? Non vedo 'class =" TOR2Hours "' nelle tue radio. – bobince

risposta

6

Non sono sicuro di cosa si voglia ma si potrebbe provare a utilizzare un ingresso di ripristino.

<input type='reset' /> 
+0

totalmente accetto, o come ho risposto non un controllo, ma l'evento 'reset' – vittore

+0

grazie per la tua risposta, ma il pulsante radio non è nella stessa forma così questo wouldn lavorare – user281867

+4

@ user281867: chiamare 'reset' per il modulo di pulsanti di opzione sono in' document.getElementById ("radiobuttonsform") reset(); ' – vittore

2

Visto che questo è praticamente il compito DOM più semplice c'è e funziona in tutti i browser script, io non suggerisco di usare i metodi di jQuery per esso:

$(".TOR2Hours")[0].checked = false; 

L'altra cosa che ocurs a me è se il tuo selettore è corretto. Intendevi selezionare un set di elementi per classe o dovrebbe essere un selettore ID?

0

Ho appena scoperto un'ottima soluzione a questo problema.

Supponendo di avere due radio che hanno bisogno di essere in grado di essere controllato/incontrollato, implementare questo codice e modificare ciò che è necessario:

var gift_click = 0; 
    function HandleGiftClick() { 
     if (document.getElementById('LeftPanelContent_giftDeed2').checked == true) { 
      gift_click++; 
      memorial_click = 0; 
     } 
     if (gift_click % 2 == 0) {document.getElementById('LeftPanelContent_giftDeed2').checked = false; } 
    } 
    var memorial_click = 0; 
    function HandleMemorialClick() {   
     if (document.getElementById('LeftPanelContent_memorialDeed2').checked == true) { 
      memorial_click++; 
      gift_click = 0; 
     } 
     if (memorial_click % 2 == 0) { document.getElementById('LeftPanelContent_memorialDeed2').checked = false; } 
    } 

:) la vostra accoglienza

+0

Non so PERCHÉ questa risposta era a -1. Questo è più vicino ad una risposta accettabile perché ** affronta la parte più difficile della deselezione di un ingresso radio - LA SEQUENZA DELL'EVENTO **. Tutti dovrebbero conoscere le ovvie proprietà 'checked' - IN REALTÀ, potrebbe non interessarti a questo, a seconda del framework che stai utilizzando. ** Il problema è ** che quando si riceve un evento - ad esempio un clic - quando si deseleziona la radio * potrebbe sempre mostrare "controllato === true' *. Questa potrebbe essere la risposta più ben pensata qui, di gran lunga. – Cody

10

è possibile accedere forma in questo modo. ..

var exampleForm = document.forms['form_name']; 

poi scorrere il modulo

for(var i=0; i<exampleForm.length; i++){ 
    alert(exampleForm[i].type); 
} 

è possibile verificare per controllare in questo modo ...

if(exampleForm[i].checked) 

per deselezionare il pulsante di scelta controllato provare ...

exampleForm[i].checked=false; 

il codice finale sarà simile a questa ...

var exampleForm = document.forms['form_name']; 
for(var i=0; i<exampleForm.length; i++){ 
    if(exampleForm[i].type) == 'radio' && exampleForm[i].checked == true){ 
     exampleForm[i].checked = false; 
    } 
} 
+0

Il tuo primo pezzo di codice dovrebbe dire 'document' invece di' documents'. Bella risposta, però. – RustyTheBoyRobot

+0

C'è un modo per dire se una radio è stata * deselezionata *? Ho lavorato in contesti così tanto tempo ... appena realizzato che 'onchange' è in realtà' onchangedtotrue' ... Se ho avuto ascoltatori su ogni radio in un gruppo, al fine di ottenere il pulsante selezionato, non dovrebbero tutti gli altri ascoltatori in quel gruppo spara con 'event.target.checked === false' ogni volta che ne viene selezionato uno nuovo? Ecco come funzionano le checkbox, giusto? – Cody

0

Io uso in questo modo per risolvere il problema in ASP.net, controllare questo ..

radioButton.InputAttributes["show"] = "false"; 
string clickJs = " if(this.show =='true'){this.show ='false'; this.checked = false;}else{this.show='true'; this.checked = true;};"; 

radioButton.Attributes["onClick"] = clickJs; 

In asp.net, è possibile utilizzare in questo modo per aggiungere un attributo. E puoi anche aggiungere manualmente un attributo al radioButton, e fare la funzione (clickJs) per cambiare gli attributi del ckecked !!!

1

Il tuo selettore è semplicemente sbagliato. Se si desidera deselezionare il pulsante di opzione da prima forma si dovrebbe usare $('input[name="BookItem"]') e non $('.TOR2Hours'):

$("#editBTNcancel").on("click", function(event){ $("#EditFormWrapper").slideUp("fast").empty(); $('input[name="BookItem"]').attr('checked', false); });

Per quanto riguarda il metodo da utilizzare per deselezionare pulsanti di opzione, i 3 metodi seguenti devono lavorare tutti:

  1. $('input[name="BookItem"]').attr('checked', false);
  2. $('input[name="BookItem"]').removeAttr('checked');
  3. $('input[name="BookItem"]').prop('checked', false);

Tuttavia, prova anche documenti di jQuery sul jQuery prop() per la differenza tra attr() e prop().

Problemi correlati