2008-12-06 11 views
13

Gracias por leer esteUsando jQuery, cómo localizar un elemento cuando el nombre y valor son conocidos

pensé que podía usar find(), pero no pudo hacer que funcione. Sé que puedo agregar ID o nombres de clase, pero me gustaría saber cómo hacerlo con el marcado actual.

Gracias

Aquí está el código HTML

<input name="keywordCheckbox" type="checkbox" value="S" /> 
<input name="keywordCheckbox" type="checkbox" value="C" /> 
<input name="keywordCheckbox" type="checkbox" value="A" /> 

y el js

<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script> 
<script type="text/JavaScript"> 

$(function(){ 
    $('[name="keywordCheckbox"]').bind("click", 
    function() { 
    if($(this).attr("checked") == true) { 
    switch(this.value) { 
     case "A": 
     var $_this = $(this) ; 
     $('[name="keywordCheckbox"]').each(function() { 
     if($(this).val() != $($_this).val()) { $(this).attr("checked",false); } 
     }); 
     break ; 
     default: 
DOESN'T WORK --> $('[name="keywordCheckbox"]').find('[value="A"]').attr("checked", false);} 
     } // END Switch 
    } // END If 
    }); // End BIND 
}); // End eventlistener 
</script> 
+0

¿Puede explicar lo que está tratando de hacer? Creo que está intentando desmarcar la casilla de verificación con el valor 'A', pero no es así como se hace. Compruebe http://docs.jquery.com/Attributes/attr#keyvalue – knuton

+0

lo siento, puedo ver cómo no estaba claro. Creo que mi respuesta aclara mi intención. ¿Estabas diciendo que la forma en que desactivo la entrada es incorrecta? Me interesaría tu solución ... el enlace no me dio otra solución –

+0

Sí. El código que usó en la línea que marcó con "NO FUNCIONA" en el origen anterior no puede funcionar, ya que sé que no hay ningún atributo o método _false_ en el objeto que devuelve attr (name). La forma en que lo haces en la solución que publicaste a continuación con attr (clave, valor) es lo que quise sugerir. – knuton

Respuesta

29

Usted debe ser capaz de encadenar los selectores de atributos:

$('input[name="keywordCheckbox"][value="A"]').attr("checked",false); 

fijará controladas en false para la entrada con el nombre y el valor de keywordCheckbox A.

$('input[name="keywordCheckbox"][value!="A"]').attr("checked",false); 

fijará a falso para comprobar las entradas con el nombre keywordCheckbox cuyos valores no son A.

EDIT

Acabo de probar lo siguiente en Firefox/Macintosh con la última jQuery. Funciona bien. ¿Qué versión de jQuery estás usando?

$(document).ready(function() { 
    $('input[name=keywordCheckbox]').bind('click', function() { 
     if (this.checked) { 
      if (this.value == 'A') {    
      $('input[name="keywordCheckbox"][value!="A"]') 
       .attr("checked",false); 
      } 
      else { 
      $('input[name="keywordCheckbox"][value="A"]') 
       .attr("checked",false); 
      } 
     } 
    }); 
}); 
+0

mis disculpas, probé su código y funcionó bien. originalmente, tuviste un^en lugar de un! para la prueba negativa, pero pensé que lo había probado en ambos sentidos ... tal vez incluí un espacio entre [nombre] y [valor] ... de todos modos me gusta tu solución ... di un voto positivo y seleccioné esta respuesta –

+0

Sí . Noté ese error y lo solucioné más tarde. Gracias. – tvanfosson

6

O usted podría hacer:

$("input[name='keywordCheckbox']").filter("input[value='A']") 

Entonces no hay necesidad de una cada función.

Cuestiones relacionadas