jQuery检测点击禁用提交按钮

tot*_*rds 41 forms jquery submit

小提琴:http://jsfiddle.net/ugzux/

正如您所看到的,我有一个带有禁用(通过javascript)提交按钮的表单.

我希望能够将click事件绑定到它,所以我可以在我允许提交表单(即再次启用该按钮)之前对输入需要修复的内容进行一些爵士指示.

但是,禁用提交按钮也显然会禁用绑定到按钮的任何点击事件,即使它们在禁用后被绑定 - 任何想法如何解决这个问题?

实际上,一种解决方案是停止禁用按钮,而是有一个事件

$('form').submit(function(event){
    event.preventDefault(); 
});
Run Code Online (Sandbox Code Playgroud)

但是我想知道禁用输入和javascript事件的来龙去脉,如果有解决方法,因为我之前从未遇到过这种行为.

ipr*_*101 49

在这个问题中找到了这个-

Firefox以及其他浏览器可以禁用已禁用的表单字段上的DOM事件.从已禁用的表单字段开始的任何事件都将被完全取消,并且不会在DOM树中向上传播.如果我错了,请纠正我,但如果您单击禁用按钮,则事件源是禁用按钮,并且完全消除了单击事件.浏览器字面上不知道点击的按钮,也没有通过点击事件.就像你点击网页上的黑洞一样.

我认为你可以通过将按钮包装在div中并在div的click事件上触发逻辑来"伪造"一次点击.但是,如上所述,禁用元素上的事件似乎没有冒出DOM树.

  • 最简单的解决方法是在CSS中添加`input [disabled] {pointer-events:none}`.然后,当禁用输入时,其父元素将捕获单击,您*可以*捕获它. (6认同)
  • 您可以使用<button type ="submit">而不是禁用它,您可以切换到type ="button"并添加一个.disabled类,相应地设置样式.在这种情况下,它不会*点击任何东西,但仍然由DOM注册.当然,这不一定是语义上的,而只是把它放在混合中.编辑:我没有意识到加载DOM后你无法改变按钮的类型.仍然可以使用此方法,但您需要克隆/替换按钮而不是仅切换类型. (3认同)

iPa*_*011 12

我发现这样做的最好方法是使用"禁用"类来禁用按钮.然后,您可以通常在jquery中捕获单击事件.如果$(this).hasClass('disabled'),你做了'爵士指示'的东西,event.preventDefault(); 一旦用户完成了他们的事情,你可以removeClass('disabled')input[type="submit"]'按钮'.简单!


Jac*_*ero 6

您可以在提交按钮周围放置一个div,并在禁用提交按钮时附加一个单击功能:

<div id="sub-div"><input type="submit"><div>

$('sub-div').click(function(event){
    if (attr('submit-button', 'disabled') == 'true')
    {
        alert('Button Disabled')
    }
});
Run Code Online (Sandbox Code Playgroud)

这只是我头脑中的代码,所以它可能不完全正确.但你明白了.

  • 这个*不会在很多浏览器中运行,因为单击被禁用按钮完全取消,并且不会冒出DOM树. (20认同)