jQuery $(this).attr(' id')返回null

时间:2014-04-23 19:42:11

标签: javascript jquery

所以,我在网页的表格中有一张图片。该图片的ID为" 0055"它栖息的细胞有id" 0055Thumb"。如果我在我的Javascript中添加以下代码:

$(document).ready(function(){
$('#0055').click(function(){
    click0055();
})
})

function click0055()
{
    $('#main').attr("src", "/images/Levi/518/11518_0055_BlackPressed_Front.png");
    var curID = $(this).attr('id');

    alert(curID);
}

不应警告(curID)返回" 0055Thumb"或" 0055"?我试图获取对象id,以便将其传递给另一个函数。有人能告诉我我做错了吗?

4 个答案:

答案 0 :(得分:6)

试试:

$('#0055').click(click0055);

如果从绑定到click0055事件的匿名函数调用click,则会丢失使用上述方法传递的上下文。另一种方法是使用jQuery.proxy

$('#0055').click(function(){
  $.proxy(click0055, this)();
});

答案 1 :(得分:1)

调用函数时,它不会从调用代码继承上下文。在函数this中,不再是对事件发生的元素的引用。

将引用传递给函数:

$(document).ready(function(){
  $('#0055').click(function(){
    click0055(this);
  })
})

function click0055(el) {
  $('#main').attr("src", "/images/Levi/518/11518_0055_BlackPressed_Front.png");
  var curID = $(el).attr('id');
  alert(curID);
}

或者,使用call方法指定函数调用的上下文:

$(document).ready(function(){
  $('#0055').click(function(){
    click0055.call(this);
  })
})

答案 2 :(得分:0)

您可以将$(this)作为参数传递:http://jsfiddle.net/hTfU7/

$(document).ready(function(){
$('#0055').click(function(){
    click0055($(this));
})
})

function click0055($thisIsMe)
{
    $('#main').attr("src", "/images/Levi/518/11518_0055_BlackPressed_Front.png");
    var curID = $thisIsMe.attr('id');

    alert(curID);
}

答案 3 :(得分:0)

问题是"这个"意味着你在调用它的范围。 这里有一个修复的jsfiddle:

http://jsfiddle.net/MZdMM/

如果你真的需要在anonimous函数中嵌套那个函数是可以的,但是要保留一个"这个"是通过将参数传递给嵌套函数。

function click0055(elem){
    $('#main').attr("src", "/images/Levi/518/11518_0055_BlackPressed_Front.png");
    var curID = $(elem).attr('id');

    alert(curID);
}

$(document).ready(function(){
    $('#0055').on("click",function(){
        var elem = this;
        click0055(elem);
        // Let's say here is more code ...
    });
});