禁用按钮仍然使用“.click()”触发
Disabled button still fires using ".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()"的功能。我会发现必须禁用 shorcut 或检查按钮是否被自己禁用非常烦人。我更喜欢解决此问题的通用解决方案。
- 但是为什么?这种行为对我来说似乎不公平。
- 有什么解决方法吗?
该属性仅禁用用户交互,该按钮仍可通过编程方式使用。
所以是的,你必须检查
function byPassDisabled(){
$('#saveButton:enabled').click();
}
或者,不要使用内联处理程序。
$(document).on('click', '#saveButton:enabled', function(){
// ...
});
供将来使用...OP 代码之所以有效,是因为即使禁用了 DOM 元素,jQuery 仍然会调用它自己的处理程序。如果使用香草javascript,则禁用的属性将得到尊重。
const element = document.getElementById('saveButton');
element.click() //this would not work
您可以通过编程方式触发对禁用按钮的单击。
有多种方法可以查找事件是用户单击按钮还是以编程方式触发。 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();
});
});
如果以编程方式调用click()
,则e.isTrigger
为真。基本上,您是在代码中手动触发单击事件。
尽管disable
,您仍然可以触发click
。正如 Spokey 所说,它只是显示用户交互(可用性仍然存在,可以通过编程方式打开)。 off
或unbind
点击即可解决此问题。
谢谢
相关文章:
- AngularJS$apply有时不会;当在highchart中使用click事件时,t触发更新{{}}中html标记中
- asp.net javascript .click() 事件未在服务器上触发
- 在引导模式中使用“ng click”触发函数
- 尽管使用了off,click函数仍会触发,这可能也会导致数组问题
- jQuery .click() 事件未在 msDropDown 元素上触发
- JQuery button.click() 处理程序在不单击的情况下触发
- 禁用按钮仍然使用“.click()”触发
- 如何找出为什么ng-click()不会第二次触发
- JavaScript 按钮不会自动触发 Click 事件
- Javascript单击元素时未触发Click事件's填充
- 当iframe中的控件触发click事件时,如何在iframe内重新加载aspx页面
- 不能触发click.namespace
- 如何在页面加载时触发('click')
- 触发('click')导致“脚本运行缓慢,是否要停止它?”
- 在setInterval()中触发('click')
- 哪些浏览器支持在input[type="file"]元素上触发click事件
- Casperjs的click()不能正确触发click事件
- 在我的.click回调中触发click事件会导致“超过最大调用堆栈大小”
- Button元素在点击按钮文本并释放它时不触发click事件(但仍在按钮内)
- 在锚html元素上按空格键不会触发click事件.如何让这一切发生