2012-06-12 17 views
8

Tengo un menú desplegable al que quiero conectar un evento JQuery que se activa si alguien hace clic en él pero luego selecciona la misma opción que ya seleccionadoEvento JQuery que se activará cuando se seleccione un menú desplegable, pero el valor no se cambia

Tengo todo funcionando usando el evento 'cambio', pero hay casos en los que es válido que el usuario haga clic en el menú desplegable y vuelva a seleccionar la misma opción. Si eso ocurre, necesito que mi controlador de eventos dispare.

¿Cómo puedo hacer esto?

+0

a mostrar el código HTML y jQuery favor – Shyju

+0

Por qué no utilizar el evento 'clic'? – Blazemonger

Respuesta

8

Pruebe algo como a continuación,

Usando .click

$(function() { 
    var cc = 0; 
    $('select').click(function() {   
     cc++; 
     if (cc == 2) { 
      $(this).change(); 
      cc = 0; 
     }   
    }).change (function() { 
     $('#result').append('Changed triggered '); 
     cc = -1; 
    });  
}); 

DEMO:http://jsfiddle.net/skram/NAHXP/2/

O usando .focus y .blur

$(function() { 
    var ddVal = ''; 
    $('select').focus(function() { 
     ddVal = $(this).val(); 
    }).blur(function() { 
     if (ddVal == $(this).val()) { 
      $(this).change(); 
     } 
    }).change (function() { 
     $('#result').append('Changed triggered '); 
    });  
}); 

DEMO:http://jsfiddle.net/skram/NAHXP/

+2

En ambos jsfiddles puedo hacer clic en 'test1', luego hacer clic fuera del menú desplegable y luego hacer clic y volver a seleccionar 'test1' - y no se activará el cambio. ¿Es esto lo que pretendías? Necesito cambiar para disparar –

4

Uso de enfoque y desenfoque de eventos ...

var selectValue; 
$('select').focus(function(){ 
    selectValue = $(this).val(); 
}).blur(function(){ 
    if (selectValue == $(this).val()) { 
    //nothing change event 
    } 
}) 
2

uso en Agregar clase para resolver este problema

$("#test").change(function(event){ 
if($(this).find('option:selected').hasClass('actived')) 
    alert('already selected');//write you code here 
else 
    $(this).find('option:selected').addClass('actived'); 

}); 

y referimos a este enlace http://jsfiddle.net/muthukumar0705/nARVu/1/

+0

Si el evento 'cambiar' no se activa, ¿funciona esto? Mi problema es que el evento de cambio no está activando. –

+1

No no funciona sin evento de cambio. ¿Puedes explicar un poco más? – MMK

+0

Si selecciona una opción, vuelva atrás y seleccione la opción * mismo * más adelante; aún necesito que el evento se dispare. –

3

Aquí es clic solución

var oldValue = null; 
$('select').click(function(){ 
    s = $(this); 
    val = s.val(); 
    if (oldValue == null) { 
     oldValue = val; 
    } else { 
     oldValue == s.val() ? alert('nothing changed') : alert('new value'); 
     $(document).unbind('click.valueCheck'); 
     oldValue = null;  
    } 
}) 

DEMO

Aquí es la solución más avanzada con el documento, haga clic extendió

DEMO2

Cuestiones relacionadas