2

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

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

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

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

但它没有用。

4

7 回答 7

5

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

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

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

现在,attributval() =是非法语法,因为attributval()它不是左值(你不能分配它)。

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

于 2012-05-03T16:10:00.660 回答
0

跳过尝试围绕函数创建函数。只需调用它:

var attributval = document.getElementsByTagName("a")[0].onclick;
attributval();
于 2012-05-03T16:10:05.997 回答
0

尝试

var attributval = document.getElementsByTagName("a")[0].getAttribute('onClick');
于 2012-05-03T16:10:06.503 回答
0

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

于 2012-05-03T16:11:37.223 回答
0

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

您可能想要的是手动触发事件jQuery 让这一切变得简单。

于 2012-05-03T16:12:14.937 回答
0

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

于 2012-05-03T16:29:20.620 回答
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');

希望这可以帮助

于 2012-05-03T16:36:53.580 回答