Wie können Sie einem HTML- select
Code programmgesteuert mitteilen , dass er herunterfallen soll (z. B. aufgrund von Mouseover)?
javascript
html
Corey Trager
quelle
quelle
<select>
, da die Leute erwarten, dass es sich auf eine bestimmte Weise verhält, und Sie verhindern, dass Leute auf anderen Plattformen (wie Mobilgeräten) Ihre Site verwenden.Antworten:
Sie können dies nicht mit einem HTML-Auswahl-Tag tun, aber Sie können es mit JavaScript und HTML tun . Hierfür gibt es eine Vielzahl vorhandener Steuerelemente, z. B. die Liste "Vorschlagen", die dem SO-Eintrag "Interessantes / Ignoriertes Tag" beigefügt ist, oder die Suche von Google Mail nach E-Mail-Adressen.
Es gibt viele JavaScript + HTML-Steuerelemente, die diese Funktion bieten. Suchen Sie nach Steuerelementen für die automatische Vervollständigung, um Ideen zu erhalten.
Siehe diesen Link für die Autocomplete-Steuerung ... http://ajaxcontroltoolkit.codeplex.com/
quelle
Früher war dies mit HTML + Javascript tatsächlich möglich, obwohl überall gesagt wird, dass dies nicht der Fall ist, aber es wurde später veraltet und funktioniert jetzt nicht mehr.
Dies funktionierte jedoch nur in Chrome. Lesen Sie mehr, wenn Sie interessiert sind.
Gemäß W3C Working Draft für HTML5, Abschnitt 3.2.5.1.7. Interaktiver Inhalt :
<select>
Als interaktiver Inhalt glaubte ich, dass es möglich ist, seine<option>
s programmatisch anzuzeigen . Nach ein paar Stunden Herumspielen entdeckte ich, dass es funktioniertdocument.createEvent()
und.dispatchEvent()
funktioniert.Das heißt, Demo-Zeit. Hier ist eine funktionierende Geige.
HTML:
Javascript:
Wenn jemand einen Weg findet, dasselbe zu tun, aber nicht in Chrome, können Sie diese Geige jederzeit ändern . .
quelle
IE10
,FF 24
. Works on:Chrome 30
,Safari 6.0.5
,Opera 16
In der Antwort von Xavier Ho wird erläutert, wie das Problem in den meisten derzeit verfügbaren Browsern gelöst werden kann. Es wird jedoch empfohlen, Ereignisse nicht mehr per JavaScript zu versenden / zu ändern . (Wie
mousedown
in diesem Fall)Ab Version 53 führt Google Chrome keine Standardaktion für nicht vertrauenswürdige Ereignisse aus . Zum Beispiel Ereignisse, die per Skript erstellt oder geändert oder über eine
dispatchEvent
Methode ausgelöst werden . Diese Änderung dient der Ausrichtung auf Firefox und IE, von denen ich denke, dass sie die Aktion bereits nicht ausführen.Zu Testzwecken hat Fiddle angegeben, dass Xaviers Antwort in Chrome 53+ nicht funktioniert. (Ich teste es nicht FF und IE).
Links als Referenz:
https://www.chromestatus.com/features/5718803933560832 https://www.chromestatus.com/features/6461137440735232
Und initMouseEvent ist ebenfalls veraltet
quelle
Dies ist der nächstgelegene Wert, den ich erreichen kann, um die Größe des Elements onmouseover zu ändern und die Größe onmouseout wiederherzustellen:
quelle
Ich habe das gleiche Problem und der einfachere Weg, dies zu lösen, war mit HTML und CSS.
quelle
<div style='position:relative'><select> <option>option 1</option> <option>option 2</option> <option>option 3</option> </select> <button>click</button></div>
folgt @DavidPortabellaIch denke, dass dies in Chrome nicht mehr möglich ist.
Es scheint, dass Version 53 von Chrome diese Funktionalität deaktiviert, wie von Asim K T angegeben.
Sie haben es jedoch in der Webansicht aktiviert, aber ich habe dies nicht getestet.
Und in dieser Diskussion wird die Idee, Entwickler ein Dropdown-Programm programmgesteuert öffnen zu lassen, aufgegeben.
quelle
Wenn jemand noch danach sucht:
Javascript:
Aktualisieren:
Eins, bis es keine perfekte Lösung für dieses Problem gibt, aber Sie können versuchen, dieses Szenario zu vermeiden. Warum willst du das tun? Ich habe mich vor einigen Monaten nach einer Lösung gefragt, um ein ausgewähltes Plugin für mobile Geräte zu erstellen
https://github.com/HemantNegi/jquery.sumoselect
Schließlich wurde das benutzerdefinierte div (oder ein anderes Element) mit einem transparenten Auswahlelement maskiert, damit es direkt mit dem Benutzer interagieren kann.
quelle
iniMouseEvent
scheint zu funktionieren, aber warum funktioniert$(select).trigger('mousedown')
es nicht?Hier ist der beste Weg, den ich gefunden habe. HINWEIS Es funktioniert nur mit IE unter Windows und Ihr Web muss sich wahrscheinlich in einer sicheren Zone befinden - da wir auf die Shell zugreifen. Der Trick ist, dass der ALT-Abwärtspfeil eine Tastenkombination zum Öffnen eines ausgewählten Dropdowns ist.
quelle
Hör auf zu denken, dass eine Sache unmöglich ist, nichts ist unmöglich zu tun, wenn du tun willst.
Verwenden Sie diese von einem Mann erstellte JS-Erweiterungsfunktion.
http://code.google.com/p/expandselect/
Fügen Sie dieses JS ein und rufen Sie einfach das Übergeben des Parameters als Ihre ausgewählte ID auf:
quelle
<SELECT>
, dass a herunterfällt. Da ausdrücklich angegeben ist, dass "Browser das Erweitern von <select> in reinem Javascript nicht zulassen, kann dieses Steuerelement nur durch direktes Klicken mit der Maus erweitert werden". Es ist also "unmöglich"! Stattdessen heißt es in der JS: "Wir ahmen die erweiterte <select> -Steuerung nach, indem wir eine weitere Auswahl erstellen, bei der mehrere Optionen gleichzeitig angezeigt werden ..." Dies ist ganz anders und kann für Ihren Anwendungsfall akzeptabel sein oder auch nicht ...Ich kann mich irren, aber ich glaube nicht, dass dies mit dem Standardauswahlfeld möglich ist. Sie könnten mit JS & CSS etwas tun, das das gewünschte Ergebnis erzielt, aber meines Wissens nicht mit Vanille SELECT.
quelle
Das Öffnen einer "HTML-Auswahl" ist durch einige in dieser Frage erwähnte und ähnliche Problemumgehungen möglich. Eine sauberere Möglichkeit besteht darin, Ihrem Projekt eine ausgewählte Bibliothek wie "select2" oder "selected" hinzuzufügen. Zum Beispiel wäre das programmgesteuerte Öffnen einer select2 so einfach wie:
quelle
Dies ist nicht genau das, wonach Sie gefragt haben, aber ich mag diese Lösung wegen ihrer Einfachheit. In den meisten Fällen, in denen ich ein Dropdown-Menü initiieren möchte, habe ich überprüft, ob der Benutzer tatsächlich eine Auswahl getroffen hat. Ich ändere die Größe des Dropdowns und fokussiere es, wodurch deutlich wird, was sie übersprungen haben:
quelle