2009-02-10 17 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> 

como probablemente ya sepa cuando solo quede una casilla de verificación document.checks.user.length = undefined. ¿Cuál es la forma más eficaz de asegurarse de que cuando solo hay una casilla de verificación, se eliminará? Estaba pensando solo en agregarlo como una declaración if independiente antes de la declaración if aquí ... cualquier sugerencia.Javascript y solo una casilla de verificación - undefined

Gracias.

+0

¿Por qué le dará todas las casillas del mismo nombre? Eso no tiene mucho sentido. – jishi

+1

porque luego puede procesarlos como una matriz cuando se envía a algo como php ... tiene perfecto sentido ... – ftrotter

Respuesta

8

utilizar una variable de control del bucle, y la pusieron a 1 si la longitud es indefinido ...

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

Saludos ...

+0

Esto es lo que estoy buscando.Sin embargo, me di cuenta de que cuando solo queda un elemento, la instrucción if que tengo no funcionará cuando solo haya 1 elemento. es decir -> if (document.checks.user [0] .checked == true) –

+1

Creo que ya no ve al usuario como una matriz ...? Voy a poner el document.checks.submit(); en este control de bucle –

-1

jQuery es su amigo:

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

(? ... si jQuery está disponible para usted)

+0

cheques es el nombre de

, el usuario es el nombre de la casilla de verificación. – jishi

+0

Ah, disculpe, ¡lo tiene! – teedyay

+0

Ugh, recomendando un marco masivo para la más simple de las tareas. – chaos

-1

probablemente me iterar a través de document.checks.elements, en busca de .type == 'caja'.

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

si quieres un bucle conjunto de casillas de verificación, puede hacer un bucle en los campos de entrada de su formulario, como:

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

Su pregunta es algo confusa, ya que su javascript obviamente tendría que estar dentro de una función llamada 'sub_delete' para ser de alguna utilidad ... alguien con el gran poder de editar preguntas podría mejorar la pregunta al hacerlo más claro ...

Así que el primer problema que tiene que sortear es el hecho de que para una casilla de verificación única, con un nombre de usuario 'usuario', no es una matriz, y por lo tanto no tiene una longitud definida, pero también si intenta acceder a ella como una arsenal .. cosas se confunden .. una reescritura completa de su función de JavaScript podría tener este aspecto:

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

Yo también tengo el mismo problema con un total de 5 casillas de verificación, de las cuales 4 están deshabilitadas y 1 está habilitado. Ahora el checkboxId.length no está definido, por lo que la única opción que podría pensar es if (checkboxId.length == undefined) {checkboxId.checked = true & submith the form}.

1

Es muy simple, simplemente cree una etiqueta de entrada oculta con el mismo nombre que la etiqueta de entrada existente.

Por ejemplo:

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