禁用按钮仍然使用".click()"触发

dom*_*omi 13 javascript jquery

似乎禁用按钮 "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>
Run Code Online (Sandbox Code Playgroud)

function save(){
    var count = parseInt($('#counter').html());
    $('#counter').html(++count);
}
function byPassDisabled(){
     $('#saveButton').click();   
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/WzEvs/363/

在我的情况下,键盘快捷键绑定到触发按钮上的".click()"的功能.我发现必须禁用shorcuts或检查按钮是否已被禁用非常烦人.我更喜欢解决这个问题的一般解决方案.

  • 但为什么?这种行为对我来说似乎不公平.
  • 任何解决方法?

Spo*_*key 23

该属性仅禁用用户交互,该按钮仍可通过编程方式使用.

所以是的,你得检查一下

function byPassDisabled(){
    $('#saveButton:enabled').click();   
}
Run Code Online (Sandbox Code Playgroud)

或者,不要使用内联处理程序.

$(document).on('click', '#saveButton:enabled', function(){
    // ...
});
Run Code Online (Sandbox Code Playgroud)

  • :not(:disabled)可以缩短为:enabled (8认同)
  • “点击”不是**用户交互? (3认同)

rtm*_*one 5

为了将来的使用...OP 代码可以工作,因为即使 DOM 元素被禁用,jQuery 仍然会调用它自己的处理程序。如果使用普通的 javascript,禁用属性将被遵守。

const element = document.getElementById('saveButton');
element.click() //this would not work
Run Code Online (Sandbox Code Playgroud)