2011-06-20 12 views
8

Tengo una pregunta con respecto a las casillas de verificación.Matriz de casillas de verificación en formularios HTML

<form method="post"> 
I speak the following languages: 
<input type="checkbox" name="lang[]" value="en">English<br /> 
<input type="checkbox" name="lang[]" value="fr">Français<br /> 
<input type="checkbox" name="lang[]" value="es">Español<br /> 
</form> 

¿Es necesario nombrar las casillas de verificación lang [] (usando una matriz) o puedo dar a cada casilla un nombre común, como:

<form method="post"> 
I speak the following languages: 
<input type="checkbox" name="lang_en" value="en">English<br /> 
<input type="checkbox" name="lang_fr" value="fr">Français<br /> 
<input type="checkbox" name="lang_es" value="es">Español<br /> 
</form> 

Pregunta 1 creo que ambas obras, si es así, ¿cuándo decides qué usar?

Pregunta 2 estoy usando el segundo método mencionado anteriormente así que puedo utilizar PHP para detectar cuál de la casilla de verificación es la selección mediante el uso de un código similar al if(isset($_POST['lang_en'])). Si tuviera que usar el primer método, ¿hay una manera rápida de verificar si se selecciona una casilla de verificación en particular? Por el momento, la solución no probada en la que puedo pensar implica hacer un if(in_array('lang_en', $_POST['lang'])) para verificar si existe en $ _POST.

Pregunta 3 La pregunta principal es esta: estoy usando el segundo método para poder verificar fácilmente si hay una casilla de verificación seleccionada en PHP. Ahora quiero agregar un enlace de texto que, al hacer clic, seleccionará todas las casillas de verificación. Mi Javascript no es muy bueno, así que estoy usando un script desde http://www.shiningstar.net/articles/articles/javascript/checkboxes.asp pero el script de ejemplo usa una matriz para los nombres de la casilla de verificación, mientras que mi código PHP no puede verificar si las casillas de verificación están seleccionadas con matrices para los nombres de las casillas de verificación. ¿Cómo se puede modificar el código de JavaScript para que funcione sin matrices?

¡Espero que se me ocurra esta molesta pregunta! ¡Gracias!

EDITAR

Javascript:

<!-- Begin 
function checkAll(field) 
{ 
for (i = 0; i < field.length; i++) 
    field[i].checked = true ; 
} 

function uncheckAll(field) 
{ 
for (i = 0; i < field.length; i++) 
field[i].checked = false ; 
} 
// End --> 
</script> 

HTML:

<form action="http://localhost/website/places/search" method="post" accept-charset="utf-8" name="subcategory"> 

<ul> 
    <li><input type="checkbox" name="cuisine_American" value="American" /> American</li> 
    <li><input type="checkbox" name="cuisine_Chinese" value="Chinese" onClick="checkAll(document.subcategory.cuisine)" /> Chinese</li> 
    <li><input type="checkbox" name="cuisine_Indian" value="Indian" onClick="checkAll(document.subcategory.cuisine)" /> Indian</li> 
    <li><input type="checkbox" name="cuisine_Japanese" value="Japanese" onClick="checkAll(document.subcategory.cuisine)" /> Japanese</li> 
    <li><input type="checkbox" name="cuisine_Korean" value="Korean" onClick="checkAll(document.subcategory.cuisine)" /> Korean</li> 
    <li><input type="checkbox" name="cuisine_Mexican" value="Mexican" onClick="checkAll(document.subcategory.cuisine)" /> Mexican</li> 
    <li><input type="checkbox" name="cuisine_Middle Eastern" value="Middle Eastern" onClick="checkAll(document.subcategory.cuisine)" /> Middle Eastern</li> 
    <li><input type="checkbox" name="cuisine_Pakistani" value="Pakistani" onClick="checkAll(document.subcategory.cuisine)" /> Pakistani</li> 
    <li><input type="checkbox" name="cuisine_Italian" value="Italian" onClick="checkAll(document.subcategory.cuisine)" /> Italian</li> 
</ul> 

</form> 
+1

opción adicional - ''. Eso es lo que uso cuando hay una necesidad de una lista dinámica de casillas de verificación. Cuando la lista es estática (es decir, está codificada), uso la opción 'name = 'lang_en''. Y nunca uso el atributo 'value' con casillas de verificación. – binaryLV

+0

wow eso es genial, tengo que probar esto, gracias! – Nyxynyx

Respuesta

6

Respuestas:

    01 De cualquier
  1. funciona ... depende de si desea que los nombres explícitos o una matriz
  2. También puede utilizar array_key_exists()
  3. Se puede publicar el código JavaScript que está utilizando en su pregunta? Voy a echar un vistazo más ...

ACTUALIZACIÓN:

Aquí es una solución de jQuery para implementar sus manipuladores onclick:

function checkAll(field){ 
    $(':checkbox[name^="cuisine_"]').each(function(index){ 
     this.checked=true; 
    }); 
} 

function uncheckAll(field){ 
    $(':checkbox[name^="cuisine_"]').each(function(index){ 
     this.checked=false; 
    }); 
} 

Tenga en cuenta que en realidad don No es necesario pasar field, a menos que desee generalizar esto y pasar la cadena para el patrón startswith (por ejemplo, cuisine_).

+0

hola thnx! Incluí el código en la publicación principal original anterior – Nyxynyx

+0

¿Está interesado en usar jQuery para # 3? Podría proponer una solución que utilice el selector jQuery para crear una matriz de todos los elementos de casilla de verificación que comienzan con "cocina_". Házmelo saber. –

+0

¡Sí, será genial! Tendré que usar AJAX muy pronto, así que tendré que aprender jQuery también. – Nyxynyx

6

1. Ambos funcionan, la solución con lang [] es mucho más flexible.Por ejemplo, si tiene una forma muy larga con una lista de casillas de verificación en algunas categorías, ej. los idiomas que el usuario habla, los países que visitó, los autos que manejó, y digamos que cada lista consta de 10 elementos, luego la codificación dura de cada uno de ellos es un dolor en ..., en el lado de PHP, usted debería verificar cada elemento manualmente , y con una matriz que puede hacer esto:

if (isset($_POST['lang'] && is_array($_POST['lang']) 
{ 
    // let's iterate thru the array 
    foreach ($_POST['lang'] as $lang) 
    { 
     // do some super-magic here 
     // in your example array elements would be $_POST['lang'] = array('en','fr','es') 
    } 
} 

2. Como se dijo anteriormente para comprobar si se seleccionó alguno de los idiomas, marque:

if (in_array('en', $_POST['lang'])) 

3. Si se va a usar jQuery simplemente utilizar este fragmento:

// selector ATTRIBUTE*=VALUE find all tags wchich ATTRIBUTE string contains VALUE 
$('input[name*=lang]').attr('checked', 'checked'); // check 
$('input[name*=lang]').removeAttr('checked'); // uncheck 
Cuestiones relacionadas