2010-04-26 25 views
6

Hola me gustaría obtener la lista de casillas de verificación seleccionadas en la página, en realidad lo que realmente necesito es obtener el texto del elemento al lado de la casilla de verificación que es un elemento html <li> el código está debajo y no su trabajoJquery marque las casillas de verificación

Aquí está mi actual jQuery:

$(document).ready(function() { 
    $('#target').click(function() { 
    alert("in"); 
    var checkValues = []; 
    $('input[name=checkboxlist]:checked').each(function() { 
     alert($(this)val()); 
     checkValues.push($(this)val()); 
    }); 
    }); 
}); 

Aquí está el código HTML:

<ul id="7b1fe2bd-1b26-4185-8cd9-aec10e652a70"> 
<li>Structured Products<input type="checkbox" name="checkboxlist"</li> 
<li>Global FID 
<ul> 
    <li>PowerPoint Presentations<input type="checkbox" name="checkboxlist"</li> 
    <li>Global Deck 
    <ul> 
    <li>Test1<input type="checkbox" name="checkboxlist"</li> 

    <li>Test2<input type="checkbox" name="checkboxlist"</li> 
    <li>Test3<input type="checkbox" name="checkboxlist"</li> 

    </ul> 
    <input type="checkbox" name="checkboxlist"</li> 
    <li>Credit Default Swaps Position 
    <ul> 
    <li>Test4<input type="checkbox" name="checkboxlist"</li> 

    <li>Test5<input type="checkbox" name="checkboxlist"</li> 

    </ul> 
    <input type="checkbox" name="checkboxlist"</li> 
    <li>Thought Leadership<input type="checkbox" name="checkboxlist"</li> 
    <li>Fixed Income Perspectives<input type="checkbox" name="checkboxlist"</li> 
    <li>Public Policy Information and Regulatory<input type="checkbox" name="checkboxlist"</li> 

    <li>Regional FID<input type="checkbox" name="checkboxlist"</li> 

</ul> 
<input type="checkbox" name="checkboxlist"</li> 
<li>Global Rates<input type="checkbox" name="checkboxlist"</li> 
<li>Global Credit Products<input type="checkbox" name="checkboxlist"</li> 
<li>FX<input type="checkbox" name="checkboxlist"</li> 

<li>Emerging Markets<input type="checkbox" name="checkboxlist"</li> 
<li>Commodities<input type="checkbox" name="checkboxlist"</li> 
<li>testcat<input type="checkbox" name="checkboxlist"</li> 
<li>testcat<input type="checkbox" name="checkboxlist"</li> 

</ul> 

Respuesta

17

Sus entradas necesitan para cerrar con un /> al final para que el HTML sea válido, como este:

<input type="checkbox" name="checkboxlist" /> 

entonces puede hacer jQuery como este para obtener una matriz del texto:

$(function() { 
    $('#target').click(function() { 
    var checkValues = $('input[name=checkboxlist]:checked').map(function() { 
     return $(this).parent().text(); 
    }).get(); 
    //do something with your checkValues array 
    }); 
});​ 

You can see this working here

Dado que todo lo que necesita es el padre de .text() con su diseño, puede utilizar .map() para obtener rápidamente una matriz de una propiedad basada en el selector.

+0

Muchas gracias Nick – kevin

+1

Para hacer que el código HTML válido no requiere de la barra, la cual el analizador del navegador ignorará. –

+0

@Tim - Por lo menos, tiene que estar cerrado, ¿por qué no hacerlo de forma válida en XHTML mientras estás en ello? Es válido HTML con él, es XHTML no válido sin él ... diciendo que el navegador ignorará por completo que es una declaración incorrecta. Estás asumiendo su DOCTYPE, pero '/>' funciona en * any * doctype, no se hacen suposiciones allí. –

3

en primer lugar hay que clos e su etiqueta de casilla

<input type="checkbox" name="checkboxlist" 

debería ser

<input type="checkbox" name="checkboxlist" /> 

creo que, desde su HTML se puede obtener el texto de la lis que será el texto deseado

$(function(){ 
    $('#target').click(function(){ 
     var selected = new Array(); 
     $("input:checkbox[name=checkboxlist]:checked").each(function(){ 
      var val = $(this).closest("li").text(); 
      selected.push(val); 
     }); 
    }); 
}); 
4
$("input[type=checkbox]:checked").parent().text() 
0

No está cerrando las etiquetas de entrada correctamente. Además, $(this)val() debe ser $(this).val().

Si tiene la intención de obtener el texto del elemento li, que contiene el elemento de entrada, se puede escribir de la siguiente manera:

$(this).parents("li:first").text(); 
+1

Hay un '.closest (" li ")' que simplifica esto;) –

Cuestiones relacionadas