是:不是(.disabled)对于事件处理程序总是必需的吗?

时间:2016-04-13 10:01:12

标签: javascript jquery html css event-handling

有没有办法摆脱事件处理程序中的:not(.disabled)li.disabled,那么“做事”还会发生吗?

我问,因为我记得因为我没有必要将:not(.disabled)添加到按钮元素,或者可能是一个按钮,其行为类似于内置li a元素的下拉列表。

HTML

<ul class="dropdown-menu">
    <li id="fooId" class="disabled">
        text
    </li>
</ul>

JAVASCRIPT

$('body').on('click', '#fooId:not(.disabled)', function () {
    // "Do stuff.."
});

更新

Boostrap dropdown li a disabled

已禁用的菜单项 将.disabled添加到下拉列表中的<li>以禁用该链接。

<ul class="dropdown-menu" aria-labelledby="dropdownMenu4">
  <li><a href="#">Regular link</a></li>
  <li class="disabled"><a href="#">Disabled link</a></li>
  <li><a href="#">Another link</a></li>
</ul>

之前我使用过这种类型,其中包含a

我正在将代码重构到另一个类,当我在它的时候,我也移除了a元素,现在我不得不将:not(.disabled)添加到eventhandler中,以免进入那里的元素按预期禁用。 但令我惊讶,我想如果删除a元素,它就不起作用。 (我必须再次测试)。

2 个答案:

答案 0 :(得分:1)

只要:not(.disabled')在DOM结构中是唯一的,您就可以删除id=fooId。您可以使用以下代码 -

$('body').on('click', '#fooId', function () {
    // "Do stuff.."
});

或者,如果li元素有多个class="disabled",那么您可以使用以下代码

 $('body').on('click', 'li.disabled', function () {
        // "Do stuff.."
    });

答案 1 :(得分:1)

如果我理解正确,你想做的是:

$('body').on('click', 'li', function () {
  if($(this).hasClass('disabled'))
    return;  // Do stuff won't execute for disabled li, but will work for others
  // "Do stuff.."
});