2013-06-26 8 views
8

Utilizzando JQuery o JavaScript, desidero rilevare quando un utente seleziona un valore, anche se non modifica il valore già selezionato.Il valore di discesa JQuery rileva è selezionato anche se non viene modificato

Come può essere realizzato?

ho provato -

$('#MyID').select(function(){ /*my function*/ }); 

e

$('#MyID').change(function(){ /*my function*/ }); //nothing changing, so this fails 

Ma essi non funzionano.

Esempio: ho un elenco a discesa con un elenco di anni senza niente selezionato, l'utente seleziona "1976", eseguo una funzione. Con "1976" selezionato, l'utente fa nuovamente clic sul menu a discesa e seleziona "1976" di nuovo, voglio eseguire nuovamente la funzione.

+4

Non è possibile, come la selezione lo stesso valore non è un cambiamento, è lo stesso. Forse potresti semplicemente ascoltare qualsiasi clic sull'elemento, e questo è il più vicino possibile senza compromettere il comportamento predefinito del browser. – adeneo

+0

Forse prova ad ascoltare per un clic su 'option'? –

+0

@AndrewPeacock - gli elementi di opzione non generano eventi del mouse in tutti i browser. – adeneo

risposta

0

Hai provato .blur()?

$('#MyID').blur(function(){ 
    //my function 
}); 

Si prega di notare che sarà necessario fare clic in un punto esterno al menu a discesa sulla pagina prima che la funzione si attivi. Non so se questo può essere passato.

JsFiddle here

+0

Purtroppo questo non lavoro, Petr R. Grazie per aver provato però. –

+0

Puoi anche provare '.focusin()' e '.blur()', funziona per me in Chrome (vedi il violino). –

+0

Quando seleziono lo stesso valore che è già stato selezionato, ciò accade per me. –

0

Prova questo ...

Per essere selezionato il valore dell'opzione ...

$("body").click(function(event) { 
    if(event.target.nodeName== "SELECT"){ 
       selectedValue = event.target.value; 
      } 
}); 

e quindi ottenere il testo dal valore

var text = $("option").filter(function() { 
     return $(this).attr("value") === selectedValue; 
    }).first().text(); 
0

Hai provato qualcosa del tipo:

$('#MyID li').click(function(){ //my function }); 

Qui si rilevano clic sugli elementi dell'elenco all'interno del menu a discesa, che dovrebbero essere le diverse opzioni. (Se il tuo HTML è leggermente diversa, basta controllare e vedere cosa tutte le opzioni hanno in comune, che tipo di elementi sono?)

+0

Nevermind ... Ho appena realizzato che questo html era dovuto a un plugin che stavo usando, e ho provato ad usare gli elementi opzione come '$ ('# opzione MyID'). Click (...)' ma non funziona , scusa! – quantka

0
$('#MyID option').hover(function(){ 
    //user is on an option, but not selected it yet 
},function(){ 
    //user left an option without selecting 
}).click(function(){ 
    //user clicked on an option, selecting it 

}); 
5

tutti i sistemi vanno (il secondo scatto, almeno ...)

Impostare un interruttore per eseguire la selezione e reimpostare lo switch dopo che è stato catturato e/o su blur.

var go = false;//switch off 
$('#MyID').on('click',function() {//on click 
    if (go) {//if go 
     //do stuff here with $(this).val() 
     go = false;//switch off 
    } else { go = true; }//if !go, switch on 
}).on('blur', function() { go = false; });//switch off on blur 

fatto un violino: http://jsfiddle.net/filever10/2XBVf/

edit: per il supporto della tastiera così, qualcosa di simile a questo dovrebbe funzionare.

var go = false;//switch off 
$('#MyID').on('focus active click',function() {//on focus/active 
    doit($(this));//do it 
}).on('change', function() { 
    go=true;//go 
    doit($(this));//and doit 
}).on('blur', function() { go = false; });//switch off on blur 

function doit(el) { 
    if (go) {//if go 
     //do stuff here with el.val() 
     go = false;//switch off 
    } else {go=true}//else go 
} 

fatto un violino: http://jsfiddle.net/filever10/TyGPU/

+0

Questo non funziona quando un utente accede alla selezione ... – DemonGyro

+1

Corretto, se OP avesse specificato che avrei fatto qualcosa di più simile a [questo] (http://jsfiddle.net/filever10/TyGPU/) – FiLeVeR10

+0

@ABogus risolve il problema? – FiLeVeR10

0

provare questo codice.

$("#MyID").click(function(){ 
    alert($("#MyID").val()); 
}); 

Try Here!

0

ho fatto un lavoro jsfiddle testato solo su firefox. Sono riuscito a fare quello che vuoi aggiungendo un'opzione fittizia alla selectbox. Questa opzione fittizia ha uno stile display:none e non sarà visibile nell'elenco delle opzioni.

DEMO

<select id="myselect"> 
    <option value="1">one</option> 
    <option value="2">two</option> 
    <option value="3" selected="selected">three</option> 
    <option value="4">four</option> 
    <option class="dummy" style="display:none">dummy</option> 
</select> 



$('#myselect').on('focus',function(){  
    $(this).find("option.dummy").prop("selected", true); 
}); 

$('#myselect').on('change',function(){ 
    var select=$(this); 
    var text=select.find("option:selected").text(); 

    $('.dummy').attr('value',select.val()).text(text); 
    alert(select.val()); 


}); 
Problemi correlati