2012-06-12 14 views
8

Ho un menu a discesa che voglio collegare un evento JQuery a quello che si attiva se qualcuno fa clic su di esso ma poi seleziona la stessa opzione che è già selezionato.Evento JQuery da attivare quando viene selezionato un menu a discesa - ma il valore non viene modificato

Ho tutto in esecuzione utilizzando l'evento 'change' ma ci sono casi in cui è valido per l'utente fare clic sul menu a discesa e riselezionare la stessa opzione. Se ciò si verifica, ho bisogno che il gestore di eventi venga attivato.

Come posso fare questo?

+0

ci mostrano il codice HTML e jQuery si prega – Shyju

+0

Perché non utilizzare l'evento 'click'? – Blazemonger

risposta

8

Provare qualcosa di simile di seguito,

utilizzando .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 utilizzando .focus e .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

Su entrambi i jsfiddles posso fare clic su 'test1', quindi fare clic lontano dal menu a discesa, quindi fare clic su e selezionare di nuovo 'test1' - e il cambiamento non viene attivato. È questo ciò che intendevi? Ho bisogno di cambiare per innescare. –

4

Usa messa a fuoco e sfocatura eventi ...

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

uso Aggiungi classe per risolvere questo 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'); 

}); 

e fare riferimento questo link http://jsfiddle.net/muthukumar0705/nARVu/1/

+0

Se l'evento "change" non si attiva, funziona? Il mio problema è che l'evento di cambiamento non sta sparando. –

+1

No non funziona senza eventi di modifica. Puoi spiegare un po 'di più. – MMK

+0

Se si seleziona un'opzione, quindi tornare indietro e selezionare l'opzione * stessa * in un secondo momento - ho ancora bisogno di sparare l'evento. –

3

Ecco click soluzione

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

Qui è la soluzione più avanzata con documento cliccare esteso

DEMO2

Problemi correlati