无法在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我已经阅读了整个答案,我的评论证明了这一点。我将删除我的否决票,因为你删除了虚假信息。我现在遇到的问题是,我们不能确定
这个
引用了
窗口
对象。这取决于代码,它可以引用任何其他内容。