我正在尝试执行在使用javascript代码的网页上执行事件(例如onClick事件)时调用的javascript函数。我从这样的事件中获取函数:
var attributval = document.getElementsByTagName("a").getAttribute('onClick');
我正在尝试将此对象(实际上是一个javascript函数)作为一个函数执行(假设我们在这个例子中,我试过:
var attributval = document.getElementsByTagName("a").getAttribute('onClick');
attributval() = function(){attributval};
attributval();
但它不起作用。
答案 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
的任何引用都不起作用。
答案 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');
希望这有帮助