Najwyraźniej wyłączone <input>
nie jest obsługiwane przez żadne zdarzenie
Czy istnieje sposób obejścia tego problemu?
<input type="text" disabled="disabled" name="test" value="test" />
$(':input').click(function () {
$(this).removeAttr('disabled');
})
Tutaj muszę kliknąć dane wejściowe, aby je włączyć. Ale jeśli go nie aktywuję, dane wejściowe nie powinny być publikowane.
javascript
jquery
html
Pierre de LESPINAY
źródło
źródło
Odpowiedzi:
Wyłączone elementy nie uruchamiają zdarzeń myszy. Większość przeglądarek będzie propagować zdarzenia pochodzące z wyłączonego elementu w górę drzewa DOM, aby procedury obsługi zdarzeń mogły być umieszczane na elementach kontenera. Jednak Firefox nie wykazuje takiego zachowania, po prostu nic nie robi po kliknięciu wyłączonego elementu.
Nie mogę wymyślić lepszego rozwiązania, ale dla pełnej kompatybilności z różnymi przeglądarkami możesz umieścić element przed wyłączonym wejściem i złapać kliknięcie tego elementu. Oto przykład tego, co mam na myśli:
jq:
Przykład: http://jsfiddle.net/RXqAm/170/ (zaktualizowany, aby używać jQuery 1.7
prop
zamiastattr
).źródło
disabled
atrybutu bez wartości, oznacza to HTML zamiast XHTML, w którym to przypadku zamykanie ukośnika nie jest konieczne.mouseenter
Itp.)input[disabled] {pointer-events:none}
CSS. Następnie kliknięcie zachowuje się tak, jakbyś kliknął element nadrzędny. IMHO jest to najprostsze, najczystsze rozwiązanie, ale niestety działa tylko w przeglądarkach, które obsługująpointer-events
właściwość CSS: caniuse.com/#search=pointer-eventsByć może możesz zrobić pole tylko do odczytu, a po przesłaniu wyłączyć wszystkie pola tylko do odczytu
a wejście (+ skrypt) powinno być
źródło
Wyłączone elementy „jedzą” kliknięcia w niektórych przeglądarkach - nie reagują na nie ani nie pozwalają na przechwytywanie ich przez moduły obsługi zdarzeń w dowolnym miejscu elementu lub dowolnego z jego kontenerów.
IMHO najprostszym, najczystszym sposobem na „naprawienie” tego (jeśli tak naprawdę musisz rejestrować kliknięcia na wyłączone elementy, tak jak robi to OP), wystarczy dodać następujący CSS do swojej strony:
Spowoduje to, że wszelkie kliknięcia wyłączonego wejścia przejdą do elementu nadrzędnego, gdzie można je przechwycić normalnie. (Jeśli masz kilka wyłączonych danych wejściowych, możesz chcieć umieścić każde z nich w osobnym kontenerze, jeśli nie zostały one jeszcze ułożone w ten sposób - dodatkowe
<span>
lub<div>
, powiedzmy - tylko po to, aby ułatwić rozróżnienie, które wyłączone dane wejściowe został kliknięty).Minusem jest to, że ta sztuczka niestety nie działa w starszych przeglądarkach, które nie obsługują
pointer-events
właściwości CSS. (Powinien działać z IE 11, FF v3.6, Chrome v4): caniuse.com/#search=pointer-eventsJeśli potrzebujesz obsługi starszych przeglądarek, musisz użyć jednej z pozostałych odpowiedzi!
źródło
input[disabled]
pasują również do elementów wyłączonych przez JavaScript (element.disabled = true;
), ale wydaje się, że tak. W każdym razie uważam, że jestinput:disabled
czystszy.Sugerowałbym alternatywę - użyj CSS:
zamiast atrybutu disabled. Następnie możesz dodać własne atrybuty CSS, aby zasymulować wyłączone wejście, ale z większą kontrolą.
źródło
źródło
Zamiast tego
disabled
możesz rozważyć użyciereadonly
. Za pomocą dodatkowego CSS możesz stylizować dane wejściowe, aby wyglądały jakdisabled
pole.W rzeczywistości jest inny problem. Zdarzenie jest
change
uruchamiane tylko wtedy, gdy element traci fokus, co nie jest logiczne w przypadkudisabled
pola. Prawdopodobnie wypychasz dane do tego pola z innego połączenia. Aby to zadziałało, możesz użyć zdarzenia „bind”.źródło
LUB zrób to za pomocą jQuery i CSS!
W ten sposób sprawiasz, że element wygląda na wyłączony i żadne zdarzenia wskaźnika nie są uruchamiane, ale umożliwia propagację, a po przesłaniu możesz użyć atrybutu „ignoruj”, aby go zignorować.
źródło
Mieliśmy dzisiaj taki problem, ale nie chcieliśmy zmieniać HTML. Aby to osiągnąć, użyliśmy zdarzenia mouseenter
źródło
Znajduję inne rozwiązanie:
Klasa „disabled” imituje wyłączony element przez krycie:
A następnie anuluj zdarzenie, jeśli element jest wyłączony i usuń klasę:
źródło
sugestia tutaj również wygląda na dobrego kandydata na to pytanie
Wykonujesz zdarzenie kliknięcia na wyłączonym elemencie? JavaScript jQuery
źródło