jquery e.target.hasClass 不工作

Posted

技术标签:

【中文标题】jquery e.target.hasClass 不工作【英文标题】:jquery e.target.hasClass not working 【发布时间】:2012-08-22 17:06:03 【问题描述】:

我动态创建了一个新的div(带有“文本框”类和 ID)以及其中的一些其他元素,稍后在我的代码中我将 div 绑定到点击事件,并显示点击元素,如下所示:

$('#textbox_'+i).bind('click', function(event)
    alert(event.target.className);

这很好,它会给我textbox 作为显示的类之一。 但是event.target.hasClass() 似乎不起作用。因此,当我执行以下操作时,什么也没有发生:

$('#textbox_'+i).bind('click', function(event)
    if(event.target.hasClass('textbox'))  alert('got it!'); 

我尝试了几种不同的方法,但在我看来event.target.hasClass() 只是不起作用。是否有其他方法来处理事件或者我做错了什么?

【问题讨论】:

【参考方案1】:

您正在尝试在标准 DOM 元素上使用 jQuery 方法 hasClass()。您需要将普通的 JS DOM 元素 e.target 转换为 jQuery 对象,如下所示:

$(event.target).hasClass('textbox')

你最终得到:

$('#textbox_'+i).on('click', function(event)
     if( $(event.target).hasClass('textbox')) alert('got it!');
);

注意on() 的使用,click 函数的正确关闭,如果您只执行一个简单的警报,则 if 语句中不需要大括号。

【讨论】:

哇!好吧,这很简单!也许这有点离题,但是 $(event.target) 和 event.target 有什么区别?前者适用于 hasClass,但当我尝试提醒 .className 时不适用。 hasClass 是一个 jQuery 函数,.className 是纯 javascript 第一个是用jQuery包裹的,所以它是一个jQuery对象,可以和jQuery方法一起使用。第二个是在函数event 中返回的纯javascript 对象,可以与纯javascript 方法一起使用,但不能与jQuery 方法一起使用。 我需要停止在 .live 监听器上的传播;所以我使用了上面的提示并得到了if(!$(e.target).hasClass("seeDetails")) return false;,效果很好。谢谢! 很好的解决方案。但是,当文档加载时出现此错误:ReferenceError: event is not defined。有什么想法吗?【参考方案2】:

如果你想在不使用 jQuery 的情况下保持你的 JS DOM 元素简单......

event.target.classList.contains('textbox')

【讨论】:

以上是关于jquery e.target.hasClass 不工作的主要内容,如果未能解决你的问题,请参考以下文章

IE 中的 DOMsubtree 修改等效项

jQuery—— jQuery 概述 / jQuery 选择器 / jQuery 样式操作 / jQuery 效果

jQuery 知识体系

jQuery

jQuery插件开发:jQuery类方法

XMLHttpRequest、jQuery.ajax、jQuery.post、jQuery.get 有啥区别