无法在jquery中获取$(this).attr(';name';)
我正在处理事件并使用绑定技术,如下所示无法在jquery中获取$(this).attr(';name';),jquery,events,Jquery,Events,我正在处理事件并使用绑定技术,如下所示 $(".floor").bind('click.index', {page:'floor.php',get:'floor='+$(this).attr('name')},loadContent); 所以我在这里做的是,我试图将一个click事件附加到class.floor,然后在函数loadContent中,我根据e.data.page和e.data.get变量发出一个ajax请求 但当我实际执行它时,url如下 floor.php?floor=未定义
$(".floor").bind('click.index',
{page:'floor.php',get:'floor='+$(this).attr('name')},loadContent);
所以我在这里做的是,我试图将一个click事件附加到class.floor,然后在函数loadContent中,我根据e.data.page和e.data.get变量发出一个ajax请求
但当我实际执行它时,url如下
floor.php?floor=未定义
请帮助我解决这个问题当您将数据传递给处理函数时,您应该注意,
$(this)
在该上下文中不引用jQuery对象。换句话说,$(this)
指的是包装在jQuery中的窗口
对象(或jQuery对象以外的任何其他对象,基于上下文)。因此,您应该在回调函数中使用$(this)
$(".floor").bind('click.index', {page:'floor.php'}, function(e){
var name = $(this).attr('name');
});
问题是当绑定函数时执行
$(this)
,而不是调用处理程序(loadContent)时。当它被绑定时,这个
很可能是指窗口对象。您在绑定时无权访问事件目标
我可能会重新构造代码,使其不传入自定义事件数据,而是修改loadContent
函数
function loadContent(e) {
var $target = $(e.target),
data;
if($target.hasClass('floor')) {
data = {page: ...};
} else {
data = ...;
}
... ajax shenanigans
}
使用此时要小心,始终仔细考虑它所指的内容
$(".floor").bind(
'click.index',
{
page: 'floor.php',
get: 'floor=' + $(this).attr('name')
},
loadContent
);
在此代码段中,this
将不会引用您认为它将引用的内容(.floor
jQuery对象)。现在不可能知道它指的是什么,这取决于您在这个代码段周围的代码。例如,您可以阅读有关此的内容
您必须注意在事件处理程序中分配name
的值,其中此
指的是.floor
function loadContent (e) {
...
var getFull = e.data.get + $(this).attr('name')
...
}
要使其起作用,您只需更改传递get
的方式:
{
page: 'floor.php',
get: 'floor='
},
我正在尝试将名称空间用于我的事件,以便可以轻松地销毁它。和bind使用可选的数据参数。除了最后一段之外,这个答案中指向命名事件的链接是错误的
click.index
是一个名称空间事件,正如OP所指出的,并且bind
可以接受Javascript对象(不是JSON,这是另一回事)作为其第二个参数。在传播错误信息之前,请先阅读文章。我更新了答案@bazmegakapa。在写评论之前,你也阅读了整个答案;)@Saeednemati我已经阅读了整个答案,我的评论证明了这一点。我将删除我的否决票,因为你删除了虚假信息。我现在遇到的问题是,我们不能确定这个
引用了窗口
对象。这取决于代码,它可以引用任何其他内容。