Видимо отключенный <input>
не обрабатывается ни одним событием
Есть ли способ обойти эту проблему?
<input type="text" disabled="disabled" name="test" value="test" />
$(':input').click(function () {
$(this).removeAttr('disabled');
})
Здесь мне нужно нажать на вход, чтобы включить его. Но если я не активирую его, вход не должен быть опубликован.
javascript
jquery
html
Пьер де ЛЕСПИНАЙ
источник
источник
Ответы:
Отключенные элементы не запускают события мыши. Большинство браузеров распространяют событие, происходящее из отключенного элемента, вверх по дереву DOM, поэтому обработчики событий могут быть размещены на элементах контейнера. Тем не менее, Firefox не демонстрирует такого поведения, он просто ничего не делает, когда вы нажимаете на отключенный элемент.
Я не могу придумать лучшего решения, но для полной кросс-браузерной совместимости вы можете поместить элемент перед отключенным вводом и поймать щелчок по этому элементу. Вот пример того, что я имею в виду:
JQ:
Пример: http://jsfiddle.net/RXqAm/170/ (обновлено для использования jQuery 1.7 с
prop
вместоattr
).источник
disabled
атрибут без значения, это подразумевает HTML, а не XHTML, и в этом случае закрывающий слеш не нужен.mouseenter
, и т . Д.)input[disabled] {pointer-events:none}
свой CSS. Тогда щелчок ведет себя так, как будто вы щелкнули родительский элемент. ИМХО, это самое простое и чистое решение, но, к сожалению, оно работает только для браузеров, которые поддерживаютpointer-events
свойство CSS: caniuse.com/#search=pointer-eventsМожет быть, вы могли бы сделать поле доступным только для чтения и при отправке отключить все поля только для чтения
и вход (+ скрипт) должен быть
источник
Отключенные элементы «съедают» клики в некоторых браузерах - они не реагируют на них и не позволяют захватывать их обработчиками событий в любом месте элемента или любого из его контейнеров.
ИМХО самый простой и чистый способ «исправить» это (если вам действительно нужно захватывать клики на отключенных элементах, как это делает OP), это просто добавить следующий CSS на вашу страницу:
Это приведет к тому, что любые щелчки на отключенном входе будут попадать на родительский элемент, где вы сможете их нормально захватывать. (Если у вас есть несколько отключенных входов, вы можете захотеть поместить каждый в отдельный контейнер самостоятельно, если они еще не выложены таким образом - дополнительный
<span>
или<div>
, скажем, - просто, чтобы было легко отличить, какой отключенный ввод была нажата).Недостатком является то, что этот трюк, к сожалению, не работает для старых браузеров, которые не поддерживают
pointer-events
свойство CSS. (Должно работать с IE 11, FF v3.6, Chrome v4): caniuse.com/#search=pointer-eventsЕсли вам нужна поддержка старых браузеров, вам нужно использовать один из других ответов!
источник
input[disabled]
будут ли совпадать элементы, отключенные JavaScript (element.disabled = true;
), но, похоже, так и есть. Во всяком случае, я нахожуinput:disabled
чище.Я бы предложил альтернативу - использовать CSS:
вместо отключенного атрибута. Затем вы можете добавить свои собственные атрибуты CSS для имитации отключенного ввода, но с большим контролем.
источник
источник
Вместо этого
disabled
вы можете рассмотреть возможность использованияreadonly
. С некоторым дополнительным CSS вы можете стилизовать ввод, чтобы он выглядел какdisabled
поле.На самом деле есть еще одна проблема. Событие
change
срабатывает только тогда, когда элемент теряет фокус, что не логично, если рассматриватьdisabled
поле. Возможно, вы вводите данные в это поле из другого вызова. Чтобы сделать эту работу, вы можете использовать событие «связать».источник
ИЛИ сделать это с помощью jQuery и CSS!
Таким образом, вы заставляете элемент выглядеть отключенным, и никакие события указателя не сработают, но все же он разрешает распространение, и если он представлен, вы можете использовать атрибут ignore, чтобы игнорировать его.
источник
У нас сегодня была такая проблема, но мы не хотели менять HTML. Таким образом, мы использовали событие mouseenter, чтобы достичь этого
источник
Я нахожу другое решение:
Класс "disabled" имитирует отключенный элемент по непрозрачности:
А затем отмените событие, если элемент отключен, и удалите класс:
источник
предложение здесь выглядит хорошим кандидатом на этот вопрос, а также
Выполнение события клика на отключенном элементе? Javascript JQuery
источник