jquery无法使用'this'获取元素id

时间:2014-04-25 17:03:39

标签: jquery this

我对函数中的'this'感到困惑。

为什么我不将'spanID'作为我点击的元素的id?

HTML

<span id="spanID" onclick="alertIt()">something</span>

JS

function alertIt(){
    alert($(this).attr("id"))
}

这里是JSfiddle

7 个答案:

答案 0 :(得分:1)

我没有在span标记中包含函数调用

我只是这样做:

<span id="spanID">something</span>

$(document).ready(function(){
    $("#spanID").click(function(){
        alert($(this).attr("id"));
    });
});

答案 1 :(得分:1)

this添加到a​​lertIt()函数

<span id="spanID" onclick="alertIt(this)">something</span>

答案 2 :(得分:0)

HTML

 <span id="spanID" onclick="alertIt($(this))">something</span>

的Javascript

function alertIt(obj){
 alert($(obj).attr("id"))
}

jsfiddle

答案 3 :(得分:0)

使用以下

$("span").on("click",function(){
    alert($(this).attr("id"));
})

工作小提琴Fiddle

答案 4 :(得分:0)

您正面临一个问题,因为您的函数中的$(this)引用了窗口对象。您应该在this内传递onclick="alertIt(this)",如:

<span id="spanID" onclick="alertIt(this)">something</span>
function alertIt(a){
    console.log(a.id);
}

<强> DEMO

您应该使用jquery .click()事件,例如:

<span id="spanID">something</span>
$("span").click(function(){
    alert($(this).attr("id"));
});

DEMO

答案 5 :(得分:0)

this选择器只是获取它嵌套的元素。例如:

$("#example").click(function(){
   $(this).fadeOut(500);
});

在您的代码中,没有嵌套this选择器的元素。

答案 6 :(得分:0)

因为在创建内联事件处理程序时,您正在创建一个匿名函数:

onclick="alertIt()"

就像:

function() {
    alertIt();
}

使用jQuery绑定的事件处理程序具有相同的行为:

$('#spanID').click(function() {
    alertIt();
});

匿名函数具有正确的上下文,但除非您明确地执行此操作,否则上下文不会传递给其他函数:

onclick="alertIt(this)"

$('#spanID').click(function() {
    alertIt(this);
});

function alertIt(obj) {
    alert(obj);
}

onclick="alertIt.call(this)"

$('#spanID').click(function() {
    alertIt.call(this);
});

function alertIt() {
    alert(this);
}