Anscheinend ein Behinderter <input>
von keinem Ereignis behandelt
Gibt es eine Möglichkeit, dieses Problem zu umgehen?
<input type="text" disabled="disabled" name="test" value="test" />
$(':input').click(function () {
$(this).removeAttr('disabled');
})
Hier muss ich auf den Eingang klicken, um ihn zu aktivieren. Wenn ich es jedoch nicht aktiviere, sollte die Eingabe nicht veröffentlicht werden.
javascript
jquery
html
Pierre de LESPINAY
quelle
quelle
Antworten:
Deaktivierte Elemente lösen keine Mausereignisse aus. Die meisten Browser verbreiten ein Ereignis, das vom deaktivierten Element stammt, im DOM-Baum, sodass Ereignishandler auf Containerelementen platziert werden können. Firefox zeigt dieses Verhalten jedoch nicht, es macht überhaupt nichts, wenn Sie auf ein deaktiviertes Element klicken.
Ich kann mir keine bessere Lösung vorstellen, aber für eine vollständige Cross-Browser-Kompatibilität können Sie ein Element vor die deaktivierte Eingabe stellen und den Klick auf dieses Element abfangen. Hier ist ein Beispiel dafür, was ich meine:
jq:
Beispiel: http://jsfiddle.net/RXqAm/170/ (aktualisiert, um jQuery 1.7 mit
prop
anstelle von zu verwendenattr
).quelle
disabled
Attribut ohne Wert verwenden, impliziert dies HTML anstelle von XHTML. In diesem Fall ist der schließende Schrägstrich nicht erforderlich.mouseenter
usw.)input[disabled] {pointer-events:none}
Ihr CSS eingeben. Dann verhält sich der Klick so, als hätten Sie auf das übergeordnete Element geklickt. IMHO ist dies die einfachste und sauberste Lösung, aber leider funktioniert sie nur für Browser, die diepointer-events
CSS-Eigenschaft unterstützen: caniuse.com/#search=pointer-eventsMöglicherweise können Sie das Feld schreibgeschützt machen und beim Senden alle schreibgeschützten Felder deaktivieren
und die Eingabe (+ Skript) sollte sein
quelle
Deaktivierte Elemente "essen" Klicks in einigen Browsern - sie reagieren weder auf sie noch erlauben sie, dass sie von Ereignishandlern irgendwo auf dem Element oder einem seiner Container erfasst werden.
IMHO ist der einfachste und sauberste Weg, dies zu "beheben" (wenn Sie tatsächlich Klicks auf deaktivierte Elemente erfassen müssen, wie es das OP tut), einfach das folgende CSS zu Ihrer Seite hinzuzufügen:
Dadurch werden alle Klicks auf eine deaktivierte Eingabe auf das übergeordnete Element übertragen, wo Sie sie normal erfassen können. (Wenn Sie mehrere deaktivierte Eingaben haben, möchten Sie möglicherweise jede in einen eigenen Container einfügen, sofern diese nicht bereits so angeordnet sind - beispielsweise eine zusätzliche
<span>
oder eine<div>
-, um die Unterscheidung der deaktivierten Eingaben zu vereinfachen wurde angeklickt).Der Nachteil ist, dass dieser Trick leider nicht für ältere Browser funktioniert, die die
pointer-events
CSS-Eigenschaft nicht unterstützen . (Es sollte von IE 11, FF v3.6, Chrome v4 funktionieren): funktionieren caniuse.com/#search=pointer-eventsWenn Sie ältere Browser unterstützen müssen, müssen Sie eine der anderen Antworten verwenden!
quelle
input[disabled]
auch mit Elementen übereinstimmen würde, die durch JavaScript (element.disabled = true;
) deaktiviert wurden, aber es scheint so. Jedenfalls finde ichinput:disabled
sauberer.Ich würde eine Alternative vorschlagen - verwenden Sie CSS:
anstelle des deaktivierten Attributs. Anschließend können Sie Ihre eigenen CSS-Attribute hinzufügen, um eine deaktivierte Eingabe zu simulieren, jedoch mit mehr Kontrolle.
quelle
quelle
Stattdessen
disabled
könnten Sie die Verwendung in Betracht ziehenreadonly
. Mit etwas zusätzlichem CSS können Sie die Eingabe so gestalten, dass sie wie eine aussiehtdisabled
Feld .Es gibt tatsächlich ein anderes Problem. Das Ereignis wird
change
nur ausgelöst, wenn das Element den Fokus verliert, was unter Berücksichtigung einesdisabled
Feldes nicht logisch ist. Wahrscheinlich schieben Sie Daten von einem anderen Anruf in dieses Feld. Damit dies funktioniert, können Sie das Ereignis 'bind' verwenden.quelle
ODER machen Sie dies mit jQuery und CSS!
Auf diese Weise wird das Element deaktiviert und es werden keine Zeigerereignisse ausgelöst. Es ermöglicht jedoch die Weitergabe. Wenn es übermittelt wird, können Sie es mit dem Attribut 'ignorieren' ignorieren.
quelle
Wir hatten heute ein solches Problem, aber wir wollten den HTML-Code nicht ändern. Deshalb haben wir das mouseenter- Ereignis verwendet, um dies zu erreichen
quelle
Ich finde eine andere Lösung:
Klasse "disabled" imitiert deaktiviertes Element durch Deckkraft:
Brechen Sie das Ereignis ab, wenn das Element deaktiviert ist, und entfernen Sie die Klasse:
quelle
Der Vorschlag hier scheint auch für diese Frage ein guter Kandidat zu sein
Klickereignis für ein deaktiviertes Element ausführen? Javascript jQuery
quelle