绑定到禁用后,禁用的输入仍会响应鼠标事件

时间:2012-01-20 14:29:17

标签: javascript jquery mouseevent bind

我正在使用Khavilo Dmitry的jQuery checkbox code来获取复选框和单选按钮。这看起来不错,但他的禁用代码不起作用。该按钮按预期显示为灰色,但它仍然响应鼠标点击。

我猜测问题是他绑定禁用如下:

var ch = this; /* Reference to DOM Element*/
...   
$ch.bind('disable', function() {ch.wrapperInner.addClass(settings.cls+'-disabled');})
   .bind('enable',  function() {ch.wrapperInner.removeClass(settings.cls+'-disabled');});

此代码是否删除了禁用鼠标事件的任何默认绑定?感谢。

1 个答案:

答案 0 :(得分:0)

代码唯一要做的就是将事件绑定到事件'disable'& '启用'

当'disable'事件被触发时,他正在向内部范围添加一个类jquery-checkbox-disabled。他在启用事件中删除了它。

<input name="checkbox.1.2" type="checkbox" id="check" checked="" style="position: absolute; z-index: -1; visibility: hidden; " disabled="disabled">
<span class="jquery-checkbox jquery-checkbox-checked">
  <span class="mark jquery-checkbox-disabled">
    <img src="empty.png">
  </span>
</span>

正如您所看到的,复选框确实被禁用,但为您提供自定义外观的元素只是常规的跨度,仍然可以点击。

看来Dmitry正在将这些跨度的点击事件传递给隐藏的复选框。

a.wrapper.click(function(e) {
                b.trigger('click', [e]);
                i(e);
                return false
            });

这就是为什么你仍然可以获得复选框的点击事件,即使它已被禁用。正在以编程方式单击该复选框。

因此,如果您的问题是您尝试检测复选框何时更改,那么我建议您使用更改事件,因为它似乎没有遇到相同的问题。

http://jsfiddle.net/vW6gj/