2012-04-02 10 views
21

ich für select Box onclick Ereignis in Option-Tag bin mitOnclick auf Option-Tag arbeiten nicht auf IE und Chrom

<select> 
    <option onclick="check()">one</option> 
    <option onclick="check()">two</option> 
    <option onclick="check()">three</option> 
</select>` 

onclick Ereignis nicht funktioniert auf IE und Chrome, aber es funktioniert gut in firefox, hier ich will nicht onchange Ereignis auf select-Tag bcz verwenden wird es nicht ein Ereignis auslösen, wenn der Benutzer dieselbe Option wählt wieder

Beispiel: sagen Erstnutzer „ein“ Drop-Down-wählt werde ich ein Popup öffnen, nachdem einige Verarbeitung stuff user cl Onclick-Ereignis auf Option-Tag, aber es funktioniert nicht auf IE und Chrom

Gibt es eine Arbeit Osés das Popup an, dass, wenn der Benutzer möchte wählen same „ein“ Dropdown es irgendwelche event.this Verwendung gelöst werden können, nicht auslösen herum für das?

+0

Können Sie uns eine Geige geben, mit der wir arbeiten können? – gdoron

+0

@gdoron http://jsfiddle.net/jq9td/11/ –

+0

Das ist nicht genug. gib uns ein vollständiges Beispiel. bitte ... – gdoron

Antwort

33

onclick Ereignis auf option Tag auf den meisten Versionen von IE, Safari und Chrome fehl: reference

Wenn Sie ein Ereignis auslösen soll, wenn Benutzer wählen, warum nicht einfach verwenden:

<select onclick="check()"> 
<option>one</option> 
<option>two</option> 
<option>three</option> 

Und wenn Sie etwas mit der spezifischen Option Benutzer ausgewählt haben möchten:

<select onclick="if (typeof(this.selectedIndex) != 'undefined') check(this.selectedIndex)"> 
<option>one</option> 
<option>two</option> 
<option>three</option> 

Auf diese Weise rufen Sie garantiert check() an, wenn und nur wenn eine Option ausgewählt ist.

Edit: Wie @ user422543 in den Kommentaren darauf hingewiesen, wird diese Lösung in Firefox nicht funktionieren.Ich fragte daher eine andere Frage hier: Why does Firefox react differently from Webkit and IE to "click" event on "select" tag?

Bisher scheint es mit <select> Tag wird nicht einheitlich in allen Browsern arbeiten. Wenn wir jedoch ein Auswahlmenü mit einer Bibliothek wie jQuery UI select menu oder Chosen simulieren, um ein Auswahlmenü anstelle von <select> zu erstellen, wird das Ereignis click auf <ul> oder <li> ausgelöst, das in allen getesteten Browsern konsistent ist.

+1

Unaufdringliche JavaScript wäre eine bessere Lösung. – Greg

+0

@Kay Zhu alles funktioniert in Chrome und IE, aber in Firefox noch vor der Auswahl der Drop-Down-Wert es löst die Funktion haben Sie einen Vorschlag dafür. Überprüfen Sie diesen Link http://jsfiddle.net/jq9td/31/ versuchen In Chrome und Firefox werden Sie den Unterschied kennenlernen. –

+0

@ kay-zhu alles funktioniert in Chrome und IE, aber in Firefox noch vor der Auswahl der Dropdown-Wert es löst die Funktion haben Sie einen Vorschlag dafür. Überprüfen Sie diesen Link http://jsfiddle.net/jq9td/31/ probier es im chrome und firefox wirst du den unterschied kennenlernen. –

2

Dies emuliert ein onclick Ereignis auf Ihrem option s, indem die Anzahl der Klicks aufgezeichnet wird.

http://jsfiddle.net/yT6Y5/1/

  • Der erste Klick ignoriert wird (verwendet, um Ihren Drop-Down zu erweitern),
  • Der zweite Klick ist effektiv Ihre "Auswahl". (Der Klickzähler wird dann zurückgesetzt).

Es ist nicht jedoch für Tastatur Interaktion ....

Oh, und ich mache Gebrauch von JQuery nicht gerecht zu werden, aber man könnte es mit reinem JS re-do

+0

danke für die Antwort es funktioniert nicht wie erwartet zB: Klicken Sie zweimal auf "zwei" es gibt Ihnen nur eine Warnung. Wie auch immer, es ist sehr brüchig, wir können diese Logik nicht benutzen. –

+0

Was meinst du "zweimal auf 'zwei' klicken, gibt nur ein Pop-up"? Der Code im JSFiddle löst ein Ereignis aus, wenn eine Option ausgewählt wird, unabhängig davon, ob der ausgewählte Index geändert wurde. Es ist kaum spröde. – Greg

+0

hier ist mein Punkt ist "es wird kein Ereignis ausgelöst, wenn eine Option ausgewählt ist, unabhängig davon, ob der ausgewählte Index geändert hat" .try es in Chrom, es wird kein Ereignis ausgelöst, wenn Sie zuerst auf Dropdown klicken, das ist richtig, aber wenn Sie auswählen Jedes Dropdown sollte ein Ereignis auslösen, das nicht stattfindet. Sehen Sie dies wie http://jsfiddle.net/jq9td/31/ es funktioniert so. –

0

Sie müssen nur

  • das Skript über die Auswahl setzen,
  • gesetzt Onclick und onbl Wählen Sie wie im Code
  • ausgewählt und passen Sie die Prüffunktion an.

Ich habe es getestet und es funktioniert :).

<script> 
    selectHandler = { 
     clickCount : 0, 
     action : function(select) 
     { 
      selectHandler.clickCount++; 
      if(selectHandler.clickCount%2 == 0) 
      { 
       selectedValue = select.options[select.selectedIndex].value; 
       selectHandler.check(selectedValue); 
      } 
     }, 
     blur : function() // needed for proper behaviour 
     { 
      if(selectHandler.clickCount%2 != 0) 
      { 
       selectHandler.clickCount--; 
      } 
     }, 
     check : function(value) 
     { 
      // you can customize this 
      alert('Changed! -> ' + value); 
     } 
    } 

</script> 
<select onclick="selectHandler.action(this)" onblur="selectHandler.blur()"> 
    <option value="value-1"> 1 </option> 
    <option value="value-2"> 2 </option> 
    <option value="value-3"> 3 </option> 
    <option value="value-4"> 4 </option> 
</select> 
+0

hallo danke für die antwort es funktioniert gut in firefox, aber nicht in chrom, es löst nicht das ereignis wenn benutzer zum ersten mal klickt und wählt den Dropdown-Wert. Überprüfen Sie diesen Link http://jsfiddle.net/yT6Y5/14/ –

3

ich einen anderen Vorschlag, es ist nicht 100%, aber fast:

<select onchange="valueChanged(this.value); this.selectedindex = -1"> 
    <option style="display: none"></option> 
    <option value="1"> 1 </option> 
    <option value="2"> 2 </option> 
    <option value="3"> 3 </option> 
    <option value="4"> 4 </option> 
</select> 

Auf diese Weise wird das Ereignis auch ausgelöst werden, wenn der Benutzer zweimal die gleiche Option ausgewählt. Der Haken ist, dass IE die leere Option anzeigen wird (es ignoriert das Stilattribut), aber das Klicken auf es löst das Ereignis nicht aus, da es immer als ausgewählt ausgewählt wird, und daher wird es nicht onchange ...

0

fand ich, dass das für mich gearbeitet folgenden - statt über die Verwendung auf klicken, verwenden Sie auf Änderung zB:

jQuery('#element select').on('change', (function() { 

    //your code here 

})); 
0

verwenden function(this) in id von select-Tag

zum Beispiel

<script type="application/javascript"> 

var timesSelectClicked = 0; 

$(function() { 
    $(document).on('click keypress', 'select', function (e) { 
     if (timesSelectClicked == 0) 
     { 
      timesSelectClicked += 1; 
     } 
     else if (timesSelectClicked == 1) 
     { 
      timesSelectClicked = 0; 
      prompt($('select option:selected').text()); 
     } 
    }); 
}); 
</script> 
Verwandte Themen