2010-03-12 19 views
8

Estoy trabajando con un seleccionar. Quiero activar y evento cuando el usuario selecciona un valor.Jquery seleccionar eventos

Estoy utilizando el evento "cambiar", el problema es que si un usuario abre la selección pero elige la misma opción que está seleccionada, el desencadenador no se dispara.

¿Hay alguna manera de capturar el evento cuando un usuario selecciona una opción de forma independiente si la opción es la misma que la que se seleccionó?

gracias.

+3

¿Por qué quiere volver a desencadenar un evento si la selección no cambia? –

Respuesta

3

No estoy seguro de si se trata de una solución multi-navegador, pero algo como esto:

$("#mySelect option").click(function() { 
    // do sth 
}); 

funciona bien en Opera/Firefox.

+0

Tengo muchas selecciones en la misma página y creo que esta opción no sería eficiente. Pero gracias. – Patxi1980

+3

Puede tener muchos 'select's - ¿No sé por qué podría ser un problema? Solo usa el selector correcto. – Crozin

+0

Concur con @Crozin. El ejemplo anterior no causaría ningún conflicto ya que la marca de almohadilla denota una identificación. Solo un elemento debe tener esa identificación individual. – Tass

0

Creo que la opción que necesita es "hacer clic" en lugar de cambiar.

+0

Esto no funcionará como se esperaba porque hará que el evento se active tan pronto como abras la selección para elegir tu opción. Por lo tanto, si planea usar la selección de un usuario en su código, podría ser engañoso. – ryanulit

4

Puede ver los eventos de cambio y clic utilizando el método de vinculación. Esto debería permitir que usted alcance la mayoría de las interacciones de teclado y ratón

$('selector').bind('click change',function() {}) 
+0

Si pongo el cambio, el problema es que se dispara cuando hago clic en la selección para ver las opciones. – Patxi1980

+0

¿Qué tal keyup y mouseout? ¿Cuál es el objetivo final de esto, como osos dice más arriba por qué es necesario reiniciar un evento si el valor no ha cambiado? –

+1

No puedo hablar por Patxi, pero en mi aplicación, al elegir una opción en la selección superior, se propaga ese valor a otras selecciones en la página.Lo contrario no es verdad (elegir una opción en otro lugar no cambiará el valor seleccionado de la selección superior). Descubrí que si un usuario cambia la selección superior a '1' y luego cambia algunos de los otros a '2', pero luego decide que realmente quiere que todos sean '1', puede "volver seleccione "'1' (que ya sería la opción seleccionada) en la parte superior de la página. – Weezle

-2
$('#selectID').change(function(){ 

    if($(this).val() == "week"){ 
    //trigger here 
    } 
}); 
<select id="selectID"> 
    <option>week</option> 
</select> 
0

No estoy seguro de que esto es lo que necesita. A continuación no está la respuesta, sino un truco.

En mi caso, cambio el valor de la casilla de selección después de obtener el valor de la misma.

$("selector").on('change', function() { 
    var selectedValue = $(this).val().trim(); 
    if (selectedValue == 'EXPECTED_VALUE') { 
    //do somethings 
    } 
    //change the value, so next time when you choose same option 
    //again the change event can be trigger 
    $(this).val('OTHER_VALUE'); 
} 

El OTHER_VALUE puede ser es valor_esperado con un espacio extra. Ejemplo: EXPECTED_VALUE = 'foo' luego OTHER_VALUE = 'foo'. Para que pueda obtener mismo valor cuando llegue SelectedValue por

var selectedValue = $(this).val().trim(); 

sólo quiero comentar pero no tengo la reputación suficiente: D