Javascript:如何使控件在方法中发送自身
而不是:Javascript:如何使控件在方法中发送自身,javascript,onclick,Javascript,Onclick,而不是: function SomeMethod(item) { item.setAttribute('name', item.id); } 愚蠢的例子,但想法不是发送id本身,而是实际控制调用方法。我发誓这是可以做到的,但我没有运气去寻找。。。部分原因是我甚至不知道该搜索什么 我以为是self,但self似乎不是我运行脚本时想要的东西。使用this关键字 function SomeMethod(itemId) { var someItem; someItem = documen
function SomeMethod(item)
{
item.setAttribute('name', item.id);
}
愚蠢的例子,但想法不是发送id本身,而是实际控制调用方法。我发誓这是可以做到的,但我没有运气去寻找。。。部分原因是我甚至不知道该搜索什么
我以为是self,但self似乎不是我运行脚本时想要的东西。使用
this
关键字
function SomeMethod(itemId)
{
var someItem;
someItem = document.getElementById(itemId);
someItem .setAttribute('name', someItem .id);
}
我倾向于在所有来自HTML属性的函数调用中使用这种方法:-
<a href="" id="someId" onclick="SomeMethod(this);"></a>
然后在javascript中执行以下操作:-
onclick="SomeMethod.call(this)"
当您还可以在Javascript代码中直接为事件处理程序属性赋值时,这具有明显的优势:-
function SomeMethod()
{
this.setAttribute('name', this.id);
}
如果SomeMethod将上下文元素作为参数,则设置起来会非常困难:-
document.getElementById("someID").onclick = SomeMethod
更糟糕的是,这将是内存泄漏关闭。您实际上不需要将此作为参数传递给函数,因为您有一个可以访问的单击事件对象。因此:
function(id) {
var elem = document.getElementById(id)
elem.onclick = function() { SomeMethod(elem); }
}("someID");
函数clickEventHandler(事件){
如果(!事件){
event=window.event;//IE使用的旧版本
//全球参考
//而不是争论。
};
var el=(event.target | | event.srcElement);//DOM使用'target';
//旧版本的
//IE使用“src元素”
el.setAttribute('name',el.id);
}
此时:
SomeMethod(this)
-this
返回窗口对象,因此不要使用它。使用这个
关键字的正确方法是使它与上下文相关,所以使用SomeMethod.call(this)
我知道它很简单。问起来有点脏,但哦,好吧,优雅灵活的解决方案。
function(id) {
var elem = document.getElementById(id)
elem.onclick = function() { SomeMethod(elem); }
}("someID");
<a href="" id="someId" onclick="clickEventHandler()"></a>
<script>
function clickEventHandler(event) {
if (!event) {
event = window.event; // Older versions of IE use
// a global reference
// and not an argument.
};
var el = (event.target || event.srcElement); // DOM uses 'target';
// older versions of
// IE use 'srcElement'
el.setAttribute('name', el.id);
}
</script>