当前元素的警报ID

时间:2012-01-29 14:37:59

标签: jquery

我使用以下代码提醒当前元素的ID。

<input type="text" id="desc" name="txtTitle" onclick="fun()">

jquery的:

function fun () {
    var currentId = $(this).attr('id');
    alert(currentId);
}

为什么警告&#34;未定义&#34;? 我尝试过:

var currentId =$('element').attr('id'); 
// and 
alert($(this).id); 
// and 
alert(this.id);

但会提醒undefined

7 个答案:

答案 0 :(得分:9)

$(this)仅适用于jQuery函数;它在fun()内没有引用任何内容。相反,试试这个:

$('input#desc').click(function() {
    alert($(this).attr('id'));
});

使用此HTML:

<input type="text" id="desc" name="txtTitle">

在HTML中使用onClick=""属性并不是特别好的做法,因此上面给出了$.click()函数。您应该始终将JavaScript放在单独的文件中(特别是在使用jQuery时)。

答案 1 :(得分:4)

尝试将其更改为:

<input type="text" id="desc" name="txtTitle" onclick="fun.call(this)">

更好的是,将事件处理程序与jQuery绑定,因为无论如何你都在使用它:

$(function() { $('#desc').click(fun); });

您的代码不起作用的原因是您从浏览器为“onclick”属性构建的事件处理函数内部调用fun()。只需调用这样的函数,就不会提供“接收器”对象 - this就没有了。如果您使用.call()调用它,但是您可以明确地这样做。

答案 2 :(得分:2)

只需使用

alert($(this).attr('id'));

答案 3 :(得分:1)

如果将字符串传递给onclick事件,则该字符串中的代码将是执行的函数。如果它调用另一个函数,则不会定义this

要么

$("#desc").click(fun)

在文档就绪时,或者如果你必须使用内联事件,传递this作为参数使用Pointy显示的方法。

答案 4 :(得分:1)

将元素更改为:

onclick="fun(this)"

功能:

function fun(elem)
{
    var currentId = $(elem).attr("id");
}

答案 5 :(得分:1)

您可以在元素调用的函数内使用alert(event.target.id);,而不将任何参数传递给函数。

答案 6 :(得分:0)

这是因为您在全局范围内调用了this

没有jQuery,你可以这样做:

<input type="text" id="desc" name="txtTitle" onclick="fun(this)">

function fun(el) {
    alert(el.id);
}

使用jQuery,您可以执行以下操作:

<input type="text" id="desc" name="txtTitle">

$(function(){
    $('input[type="text"]').click(function(){
        alert(this.id);
    });
});