2009-02-10 7 views
6
for (i = 0; i < document.checks.user.length; i++) //for all check boxes 
{ 
    if (document.checks.user[i].checked == true) 
    { 
     document.checks.submit(); 
     return 0; 
    } 
} 

<body> 
<form action="" method=POST name="checks" ID="Form2"> 
    I have a bike: 
    <input type="checkbox" name="user" value="Bike" ID="Checkbox1"> 
    <br> 
    <br> 
</form> 
<input type="button" value="Delete" 
    class="btn" onclick="sub_delete()" 
    onmouseover="hov(this, 'btn btnhov')" onmouseout="hov(this, 'btn')" 
    id="Button1" name="Button1" 
/> 
</body> 

come probabilmente già sapete quando c'è una sola casella di controllo a sinistra document.checks.user.length = indefinito. Qual è il modo più efficiente per assicurarsi che quando c'è una sola casella di controllo, sarà cancellato. Stavo pensando di pensare di aggiungerlo come una dichiarazione separata se prima della dichiarazione if qui ... ogni suggerimento.Javascript e solo una casella di controllo - indefinito

Grazie.

+0

Perché si darà tutte le caselle di controllo lo stesso nome? Non ha molto senso. – jishi

+1

perché è possibile elaborarli come array quando viene inviato a qualcosa come php ... ha perfettamente senso ... – ftrotter

risposta

8

utilizzare una variabile di controllo del ciclo, e impostarlo su 1 se la lunghezza è indefinito ...

var len = document.checks.user.length; 
if(len == undefined) len = 1; 
for (i = 0; i < len; i++) //for all check boxes 

migliori saluti ...

+0

Questo è quello che sto cercando.Tuttavia, mi sono reso conto che quando è rimasto solo un elemento, l'istruzione if che ho non funzionerà quando c'è solo 1 elemento. io -> if (document.checks.user [0] .checked == true) –

+1

Credo che non veda più l'utente come un array ....? Metterò il documento.checks.submit(); in questo controllo ad anello. –

-1

jQuery è tuo amico:

$("input[type='checkbox']").attr('checked', false); 

(? ... se jQuery è a vostra disposizione)

+0

checks è il nome dello

, user è il nome della casella di controllo. – jishi

+0

Ah, chiedi scusa - giusto che tu sia! – teedyay

+0

Ugh, raccomandando una struttura massiccia per le attività più semplici. – chaos

-1

probabilmente sarei iterare attraverso document.checks.elements, alla ricerca di .type == 'casella'.

1
if(document.checks.user[0]) { 
    //it's an array 
} 
else { 
    //it's a single element 
} 
3
if (document.getElementById('Checkbox1').checked) { /* do something */ } 

se si desidera ciclo di Un sacco di caselle di controllo, è possibile collegare i campi di input del modulo, ad esempio:

var formNodes = document.checks.getElementsByTagName('input'); 
for (var i=0;i<formNodes.length;i++) { 
    /* do something with the name/value/id or checked-state of formNodes[i] */ 
} 
1

La tua domanda è un po 'confusa, dal momento che il tuo javascript dovrebbe essere all'interno di una funzione chiamata "sub_delete" per essere utile ... qualcuno con la potente potenza di modificare le domande potrebbe migliorare la domanda rendendo più chiaro ...

Quindi il primo problema che devi risolvere è il fatto che per una singola casella di controllo, con un determinato nome 'utente', non è un array, e quindi non ha una lunghezza definita, ma anche se provi ad accedervi come serie .. le cose si confondono .. una riscrittura completa della funzione javascript potrebbe assomigliare a questo:

function sub_delete{ 
     if (typeof document.checks.user.length === 'undefined') { 
    /*then there is just one checkbox with the name 'user' no array*/ 
     if (document.checks.user.checked == true) 
          { 
           document.checks.submit(); 
           return 0; 
          } 
    }else{ 
    /*then there is several checkboxs with the name 'user' making an array*/ 
     for(var i = 0, max = document.checks.user.length; i < max; i++){ 
      if (document.checks.user[i].checked == true) 
          { 
           document.checks.submit(); 
           return 0; 
          } 

     } 
    } 
    }//sub_delete end 

HTH, -FT

1

Anch'io sono affrontato lo stesso problema con un totale di 5 caselle di controllo di cui 4 disabilitate e 1 abilitata. Ora il checkboxId.length non è definito, quindi l'unica opzione che potrei pensare è if (checkboxId.length == undefined) {checkboxId.checked = true & submith il modulo}.

1

È molto semplice, basta creare un tag di input nascosto con il nome stesso del tag di input del checkbox esistente.

Ad esempio:

<input type="checkbox" name="user" value="Bike" ID="Checkbox1"> 
<input type="hidden" name="user" value=""/>