jQuery:$(this).attr(' id')找不到元素的id - undefined

时间:2016-06-27 16:52:44

标签: javascript jquery html

我试图获取身份证,只是简单地提醒他点击,但是确实只是"未定义" ... 你能帮我吗? 重要代码: HTML:

<img src="/pictures/picture.jpg" class="r-gal-photo" id='1' onclick="alertme()" />

jQuery的:

function alertme() {
alert($(this).attr('id'));
}

你能看到问题吗?我不能...... 我的错: 对不起,我想简化代码,但我没有意识到我使用了&#34; alert()&#34;作为自定义功能的名称。

2 个答案:

答案 0 :(得分:1)

要解决的第一个问题是函数名称,我怀疑它在您的实际代码中有所不同,因为否则您将无法获得它。

您已使用旧式“onclick”属性将该功能与该元素相关联。没有什么能保证this会像你期望的那样绑定到元素。您可以更改元素:

最好是使用jQuery来绑定处理程序:

$("#1").on("click", function() {
  alert(this.id);
});

答案 1 :(得分:0)

正如其他人所说,问题

this关键字的背景。

this指的是CALL ITSELF中的DOM元素(正如您所想的那样),但是一旦调用alertme(),它就没有在其范围内定义。 要看到它你可以看看这个JS:

function alertme(){
    alert($(this).attr('id'));
    console.log(this);
}

和这个HTML标记:

<img src="/pictures/picture.jpg" class="r-gal-photo" id='abc' onclick="console.log(this); alertme()" />

你会看到你首先进入控制台的元素,然后是警报'undefined',然后是控制台窗口


要解决此问题

,您可以使用javaScript Function.prototype.call() function简单地在调用中指定this的含义:

仅在HTML中将标记更改为

<img src="/pictures/picture.jpg" class="r-gal-photo" id='abc' onclick="alertme.call(this)" />

它将与您的alertme()一起使用。



或者你可以将this传递给alertme,如下所示:

function alertme(elem){
    alert($(elem).attr('id'));
}

HTML:

<img src="/pictures/picture.jpg" class="r-gal-photo" id='abc' onclick="alertme(this)" />



来源:

Nice article to understand 'this' in jQuery

this in JS binded by on markup