我使用以下代码提醒当前元素的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
答案 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)
在文档就绪时,或者如果你必须使用内联事件,传递使用Pointy显示的方法。this
作为参数
答案 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);
});
});