在javascript中将对象作为函数调用

时间:2012-05-03 16:05:20

标签: javascript javascript-events onclick

我正在尝试执行在使用javascript代码的网页上执行事件(例如onClick事件)时调用的javascript函数。我从这样的事件中获取函数:

var attributval = document.getElementsByTagName("a").getAttribute('onClick');

我正在尝试将此对象(实际上是一个javascript函数)作为一个函数执行(假设我们在这个例子中,我试过:

var attributval = document.getElementsByTagName("a").getAttribute('onClick');
attributval() = function(){attributval};
attributval();

但它不起作用。

7 个答案:

答案 0 :(得分:5)

DOM属性与JavaScript属性不同(即使它们可以具有相同的名称onclick)。你应该使用

var attributval = document.getElementsByTagName("a")[0].onclick;

从JS对象中检索函数(或null)(而不是getAttribute(),这很可能会为属性返回toString()。)

现在,attributval() =是非法语法,因为attributval()不是l值(您无法将分配给)。

attributval();可以工作但没有第二行(这是非法的JavaScript),它将调用原始的A元素onclick处理程序(如果已定义)或抛出异常(如果{{1}处理程序是onclick)。

答案 1 :(得分:0)

跳过尝试围绕该功能创建一个函数。只需称呼它:

var attributval = document.getElementsByTagName("a")[0].onclick;
attributval();

答案 2 :(得分:0)

var attributval = document.getElementsByTagName("a")[0].getAttribute('onClick');

答案 3 :(得分:0)

通过使用get属性,您将返回一个字符串,因此您唯一的方法是使用eval(onclickString)var fn = new Function(onClickString); fn();

答案 4 :(得分:0)

attributval只是一个字符串,对吗?如果您信任此代码,请使用eval(attributval)执行此代码 - 但是对this的任何引用都不起作用。

你可能想要的是manually trigger an eventjQuery makes that easy.

答案 5 :(得分:0)

如果你想做的不仅仅是点击,那么Chris McDonald在Is it possible to trigger a link's (or any element's) click event through JavaScript?的回答似乎符合要求,尽管你可能需要留意第三条评论。

答案 6 :(得分:0)

我认为我会在如何使用jQuery处理事件方面添加一个简短的答案,因为它看似相关。

// Select the link using it's ID field (assuming it has one)
var myLink = $('a#myLink')

// Add a click event to the link
myLink.on('click', function(e) {
    console.log("I've been clicked!");
});

// Trigger the click event manually. This would result in the above
// function being run. Interestingly, this will not cause the browser
// to follow the link like a real click would
myLink.trigger('click');

// Remove the click event (this removes ALL click events)
myLink.off('click');

// Add a click event to the link that only runs once, then removes itself
myLink.one('click', function() {
    alert("I'll only bother you once!");
});

// Add a click event that you can identify from other click events.
// This means that you can trigger it or remove it without bothering other
// click events
myLink.on('click.myClick', function() {
    alert("This click event has been identified as 'myClick'");
});

// Now you can trigger it without triggering other click events
myLink.trigger('click.myClick');

// And remove it, also with no harm coming to other click events
myLink.off('click.myClick');

希望这有帮助