Кнопка "Отключено" все еще срабатывает с помощью ".click()"
Кажется, что кнопка отключена. Функция onclick по-прежнему запускается при ее программном программировании, например:
<div>
<input type="button" onclick="save()" id="saveButton" value="save" disabled="disabled" />
<input type="button" onclick="byPassDisabled()" value="bypass disabled button"/>
<div id="counter">0</div>
function save(){
var count = parseInt($('#counter').html());
$('#counter').html(++count);
}
function byPassDisabled(){
$('#saveButton').click();
}
см. http://jsfiddle.net/WzEvs/363/
В моей ситуации ярлыки клавиш привязаны к функциям, запускающим кнопки ".click()" на кнопках. Мне будет очень неприятно отключать шоркуты или проверять, отключена ли кнопка. Я бы предпочел общее решение, устраняющее эту проблему.
- Но почему? Такое поведение для меня не кажется справедливым.
- Любое обходное решение?
Ответы
Ответ 1
Атрибут отключает только пользовательское взаимодействие, кнопка все же используется программно.
Итак, вы должны проверить
function byPassDisabled(){
$('#saveButton:enabled').click();
}
В качестве альтернативы не используйте встроенные обработчики.
$(document).on('click', '#saveButton:enabled', function(){
// ...
});
Ответ 2
Вы можете программно запускать нажатие на отключенную кнопку.
Есть способы найти, является ли событие нажатием кнопки пользователем, или оно запускается программно. http://jsfiddle.net/WzEvs/373/
$(function () {
$("#saveButton").on('click', function (e) {
if (!e.isTrigger) {
var count = parseInt($('#counter').html());
$('#counter').html(++count);
}
});
$("#bypassButton").on('click', function (e) {
$("#saveButton").click();
});
});
e.isTrigger
является истинным, если вы вызываете click()
программно. В основном вы запускаете событие click вручную в коде.
Ответ 3
Вы можете запускать click
, хотя и сделали его disable
. Как сказал Spokey, он просто показывает взаимодействие с пользователем (юзабилити по-прежнему сохраняется, что можно включить программным путем).
off
или unbind
щелчок решит эту проблему.
Спасибо
Ответ 4
Для будущего использования... OP-код работает, потому что jQuery по-прежнему будет называть его собственными обработчиками, даже если элемент DOM отключен. Если бы кто-то использовал ванильный javascript, атрибут disabled был бы выполнен.
const element = document.getElementById('saveButton');
element.click() //this would not work