jquery 当 class 被移除时,点击事件应该停止,但它并没有

jquery click event should stop when class is removed but it does not

我有一个 link 不想被点击,所以我创建了以下代码:

<a class="not-allowed" id="new-user" href="users/new">New</a>

<script>
    $('.not-allowed').click(false);
</script>

经过一些用户操作后,我希望 link 可以点击,所以我使用以下代码:

$('#new-user').removeClass("not-allowed");

class "not-allowed" 已成功删除,但 link 仍然无法点击。我不想让所有 "not-allowed" 都可以点击,因为页面上还有更多内容不应该被点击。如何使 link 可点击?

一个选项是将事件委托给锚点的共同父级。例如,如果 #test 是他们的祖先:

$('#test').on('click', '.not-allowed', false);

使用它您可以自由添加或删除 class,而无需管理每个元素的单独点击事件。

问题是,当您调用 $('.not-allowed').click(false); 时,它会向该元素添加一个事件处理程序。删除 class 不会删除该事件处理程序。所以解决方案是删除事件处理程序。您可以通过添加:

$( "#new-user" ).unbind();

删除 class 名称的任何位置。

Demo here

我发现有两处不对,其中一处可能只是您问题中的错字。

首先,您要删除 class 的选择器是 'new-user',它应该是“#new-user”。

其次,即使删除了 class,点击事件处理程序仍然绑定到 link。

要删除点击事件处理程序,您可以这样做:

$('#new-user').off('click');

要禁用 link,请参阅 this question 的已接受答案。

然而,要使这样一个禁用的 link 再次可点击,不仅需要删除 class,还需要取消绑定禁用 link 的处理程序]:

$('new-user').removeClass('not-allowed');
$('new-user').off('click');