Ich verwende jQuery, um Elemente auszublenden und anzuzeigen, wenn eine Optionsfeldgruppe geändert / angeklickt wird. Es funktioniert gut in Browsern wie Firefox, aber in IE 6 und 7 wird die Aktion nur ausgeführt, wenn der Benutzer dann auf eine andere Stelle auf der Seite klickt.
Wenn Sie die Seite laden, sieht alles gut aus. Wenn Sie in Firefox auf ein Optionsfeld klicken, wird eine Tabellenzeile ausgeblendet und die andere sofort angezeigt. In IE 6 und 7 klicken Sie jedoch auf das Optionsfeld, und nichts passiert, bis Sie irgendwo auf die Seite klicken. Erst dann zeichnet der IE die Seite neu und blendet die relevanten Elemente aus und ein.
Hier ist die jQuery, die ich verwende:
$(document).ready(function () {
$(".hiddenOnLoad").hide();
$("#viewByOrg").change(function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByProduct").change(function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
});
Hier ist der Teil des XHTML, der davon betroffen ist. Die gesamte Seite wird als XHTML 1.0 Strict validiert.
<tr>
<td>View by:</td>
<td>
<p>
<input type="radio" name="viewBy" id="viewByOrg" value="organisation"
checked="checked" />Organisation</p>
<p>
<input type="radio" name="viewBy" id="viewByProduct" value="product" />Product</p>
</td>
</tr>
<tr class="visibleOnLoad">
<td>Organisation:</td>
<td>
<select name="organisation" id="organisation" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
<tr class="hiddenOnLoad">
<td>Product:</td>
<td>
<select name="product" id="product" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
Wenn jemand eine Idee hat, warum dies geschieht und wie es behoben werden kann, wäre er sehr dankbar!
quelle
click
unterscheidet sich davonchange
darin, dass sein Eventhandler auch aufgerufen wird, wenn auf die bereits ausgewählte Option geklickt wird, währendchange
dies nicht der Fall ist. Diese Antwort enthält ein Beispiel für die Verwendung von jQuery.data
zum Vergleichen der alten und neuen Werte.Das Problem bei der Verwendung des
click
Ereignisses anstelle vonchange
besteht darin, dass Sie das Ereignis erhalten, wenn dasselbe Optionsfeld ausgewählt ist (dh sich nicht tatsächlich geändert hat). Dies kann herausgefiltert werden, wenn Sie überprüfen, ob der neue Wert vom alten abweicht. Ich finde das etwas nervig.Wenn Sie das
change
Ereignis verwenden, stellen Sie möglicherweise fest, dass es die Änderung erkennt, nachdem Sie auf ein anderes Element im IE geklickt haben. Wenn Sieblur()
dasclick
Ereignis aufrufen , wird daschange
Ereignis ausgelöst (nur wenn sich die Optionsfelder tatsächlich geändert haben).So mache ich das:
Jetzt können Sie das Änderungsereignis wie gewohnt verwenden.
Bearbeiten: Es wurde ein Aufruf von focus () hinzugefügt, um Probleme mit der Barrierefreiheit zu vermeiden (siehe Bobbys Kommentar unten).
quelle
Haben Sie das Ereignis onpropertychange des IE ausprobiert? Ich weiß nicht, ob es einen Unterschied macht, aber es ist wahrscheinlich einen Versuch wert. IE löst das Änderungsereignis nicht aus, wenn Werte über JS-Code aktualisiert werden, aber möglicherweise funktioniert onpropertychange in dieser Instanz.
quelle
Das sollte auch funktionieren:
Danke Pier. Das war sehr hilfreich.
quelle
click
durchclick keyup keypress
, um Tastaturunterstützung hinzuzufügen.Im IE müssen Sie das Klickereignis verwenden, in anderen Browsern onchange. Ihre Funktion könnte werden
quelle
click
durchclick keyup keypress
, um Tastaturunterstützung hinzuzufügen.füge dieses Plugin hinzu
dann
quelle
Ich hatte das gleiche Problem mit dem Eingabetext.
Ich habe mich verändert:
zu
und alles funktioniert gut für mich!
quelle
Dies ist eine einfache Möglichkeit, den IE anzuweisen, das Änderungsereignis auszulösen, wenn auf das Element geklickt wird:
Sie können dies auf etwas Allgemeineres erweitern, um mit mehr Formularelementen zu arbeiten:
quelle
Ich bin mir ziemlich sicher, dass dies ein bekanntes Problem mit dem Internet Explorer ist. Das Hinzufügen eines Handlers für das
onclick
Ereignis sollte das Problem beheben:quelle
Erzwingen Sie im IE Radio und Kontrollkästchen, um ein "Änderungs" -Ereignis auszulösen:
quelle
Ab jquery 1.6 ist dies kein Problem mehr. Ich bin mir nicht sicher, wann es behoben wurde. Gott sei Dank dafür
quelle
Wenn Sie Ihre jQuery-Version auf 1.5.1 ändern, müssen Sie Ihren Code nicht anpassen. Dann hört IE9 einfach perfekt zu:
http://code.jquery.com/jquery-1.5.1.min.js
quelle
Der Trick mit dem Klick funktioniert ... aber wenn Sie den richtigen Status des Radios oder des Kontrollkästchens erhalten möchten, können Sie Folgendes verwenden:
quelle
Wenn Sie anstelle von "Klicken" klicken, ändert sich das Verhalten. Ich möchte das Verhalten von Änderungsereignissen lieber mit einem Timer (setTimout) emulieren.
so etwas wie (Warnung - Notizblockcode):
quelle
versuchen Sie dies, es funktioniert für mich
quelle
Dies kann jemandem helfen: Anstatt mit der ID des Formulars zu beginnen, zielen Sie auf die ausgewählte ID ab und senden Sie das Formular bei Änderung wie folgt:
und die jQuery:
(Natürlich ist die Schaltfläche "Senden" optional, falls Javascript deaktiviert ist.)
quelle
Versuche Folgendes:
quelle
Vermeiden Sie die Verwendung von .focus () oder .select () vor der .change () -Funktion von jquery für IE, dann , ich verwende es auf meiner Site.
Vielen Dank
quelle
quelle
Bitte versuchen Sie es mit jedem anstelle von Ändern / Klicken , was auch beim ersten Mal im IE und in anderen Browsern einwandfrei funktioniert
Ich arbeite nicht zum ersten Mal
Funktioniert auch beim ersten Mal einwandfrei
quelle