2011-05-29 8 views
37

Me parece que no puede obtener el siguiente trabajo:jQuery - Selectores múltiples en a: no()?

$('input:not([type=radio][type=checkbox])').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
}); 

intentado algunas de sintaxis diferente, alguien me puede ayudar a cabo en este caso.

Saludos
Charlie

+0

posible duplicado de [jQuery - múltiple: no selector] (http://stackoverflow.com/questions/7144976/jquery-multiple-not-selector) –

Respuesta

67

Estás confundiendo la multiple selector con el multiple attribute selector. Usted debe escribir:

$("input:not([type=radio], [type=checkbox])"); 

El selector de atributos múltiples [type=radio][type=checkbox] coincide con los elementos cuya type atributos son iguales a tantoradioycheckbox, que no pueden suceder en este universo.

+0

Perfecto !, gracias Frédéric. Parece como si estuviera confundiendo esos. Bookmarked :) –

+0

Creo que sería más cierto decir "no puede suceder en esta implementación de html" en lugar de tratar de hablar por todo el universo. Es un gran * universo, alguna raza alienígena puede tener una implementación html que permita una lista de valores separados por comas para un atributo dado, por ejemplo. (* muchos cosmólogos creen que el universo es realmente infinito, en cuyo caso existirá una implementación de html en algún lugar) –

3

La sintaxis dentro de not() es idéntica a la sintaxis del selector normal, por lo que si desea hacer coincidir cosas que no son ninguna de esas cosas, use un selector en el que no coincida con ambos (ya que esencialmente está negando el selector). ¿Cómo haces eso? De la misma manera que se aplican estilos a varios selectores a la vez en el CSS, con una coma, como tan:

$('input:not([type=radio],[type=checkbox])') 

Eso debe seleccionar todas las entradas de la no [type=radio] y no [type=checkbox]

+3

Tenga en cuenta que esto solo se aplica a ': not()' de jQuery. El ': not()' de CSS3 no puede aceptar nada más que un [selector simple] (http://www.w3.org/TR/css3-selectors/#simple-selectors-dfn). Como tal, si pasa algo más que un simple selector a ': not()' en jQuery, los navegadores modernos no pueden analizar el selector con 'querySelectorAll()', por lo que puede haber un golpe de rendimiento (si es microscópico). – BoltClock

+0

Sí, gracias por esa aclaración, mi comparación CSS no dejó en claro que el selector CSS3 no _no funciona así. – darkliquid

0

También puede excluir este tipo de elementos :

$('input').not('[type=radio], [type=checkbox]').live('click', function() { 
    alert("You haven't clicked a radio or checkbox!"); 
});