Problem: Ich habe eine Dropdown-Liste mit einer Liste von Jahren, in der nichts ausgewählt ist. Der Benutzer wählt "1976" aus. Ich führe eine Funktion aus. Wenn der Benutzer erneut auf die Dropdown-Liste klickt und WIEDER "1976" auswählt, möchte ich die Funktion erneut ausführen.

$('select').on('change', function (e) 
{
var optionSelected = $("option:selected", this);
var valueSelected = this.value; 
alert(valueSelected);      
});
3
vasmay 3 Dez. 2013 im 18:40

5 Antworten

Beste Antwort
Simple JS
---------

<html>
<head>
<script>
var prevIndex = "";

function onSelect()
{
    var currIndex = document.getElementById("ddList").selectedIndex;
    if( currIndex > 0 )
    {
        if( prevIndex != currIndex )
        {
            alert("Selected Index = " + currIndex);
            prevIndex = currIndex;
        }
        else
        {
            prevIndex = "";
        }
    }
}
</script>
</head>
<body>
    <select id="ddList" onClick="onSelect()">
        <option value="0">Select Me</option>
        <option value="1">List1</option>
        <option value="2">List2</option>
        <option value="3">List3</option>
    </select>
</body>
</html>
3
Prabathi 3 Dez. 2013 im 17:18

Diese Grundidee sollte mit jQuery mithilfe des Klickereignisses funktionieren:

$('#yourselect').click(function() {
  console.log("your function");
});

Eine einfache if-Anweisung kann verhindern, dass die Funktion beim ersten Klicken auf das Auswahlelement ausgelöst wird.

2
Christopher Tokar 3 Dez. 2013 im 14:50

Ich habe wie folgt behoben,

<html>
<head>
<script>
function onSelect()
{
    var dd = document.getElementById('ddList');
    var txtTerms = document.getElementById('selValue');            
    var storeLstSlct = document.getElementById('checkIndx');
    var slctdValue = '';   

    if(dd.selectedIndex == 0)
    {
        return false;
    }else if(storeLstSlct.value == dd.options[dd.selectedIndex].value)
    {              
        storeLstSlct.value = 'abcd'; 
        return false;              
    }else
    {                            
        slctdValue = dd.options[dd.selectedIndex].value;    
        if(txtTerms.value != '')                     
            txtTerms.value = txtTerms.value + ' , ' + slctdValue;
        else
            txtTerms.value = slctdValue;  
        storeLstSlct.value = slctdValue;              
    }
}

</script>

</head>
<body>
<select id='ddList' onclick='onSelect()'>
<option value='0'>Select Me</option>
<option value='One'>List1</option>
<option value='Two'>List2</option>
<option value='Three'>List3</option>
</select>
<input type='hidden' name='checkIndx' id='checkIndx' />
<input type='text' name='selValue' id='selValue' />
</body>
</html>
0
vasmay 4 Dez. 2013 im 07:36

Die nächstgelegene Funktionalität, die Sie sich vorstellen können, ist die folgende:

-HTML-

<select class="opt-evt">
    <option value="" selected="selected"></option>
    <option value="1976">1976</option>
</select>

-jQuery-

$(document).ready(function(){

    $('.opt-evt').change(function(){
        $(this).blur();
    }).blur(function(){
        console.log($(this).find('option:selected').val());
    });

});

Die Einschränkung ist, dass, wenn der Benutzer erneut '1976' auswählt, das gewünschte Ereignis nur auf Blur ausgelöst wird.

http://jsfiddle.net/4G9Jf/

1
Nick G 3 Dez. 2013 im 15:21

Das Mouseup-Ereignis sollte den Trick machen:

$('select').mouseup(function(){
    console.log("hue");
});

http://jsfiddle.net/5Fcgr/

Beachten Sie, dass dies zweimal ausgelöst wird, wenn ein neuer Wert im Listenfeld ausgewählt wird. Einmal beim Öffnen der Optionen und einmal beim Auswählen einer Option.

0
Kristof Feys 3 Dez. 2013 im 15:08