有什么方法可以将元素onclick事件挂钩到变量?
如果我更改变量,onclick事件也会更新吗?为什么不这样呢?
当我写一个框架时,有时我在页面的不同部分有一些按钮,但这些按钮挂钩到同一个事件功能。
当我想更改事件功能时,我必须更改所有这些按钮的事件!
我可以这样做吗?
var publicFunc = function(){console.log('aaa');},
button1 = document.getElementById('button1'),
button2 = document.getElementById('button2');
button1.onclick = publicFunc;
button2.onclick = publicFunc;
//i hope when i change publicFunc, all onclick event change
publicFunc = function(){console.log('bbb');};
//how to tell all the buttons this event function has changed?!
//i hope button1.onclick now is "function(){console.log('bbb');};"
//but of course it's "function(){console.log('aaa');};"
//is there any smart way to change it to "bbb"???
我想到的第一个想法是找到一种在Javascript中使用指针的方法,就像在C / C ++中一样,但在硬搜索之后,我找不到有关它的信息。
答案 0 :(得分:3)
执行button2.onclick = publicFunc;
时,您将函数分配给.onclick
属性,而不是变量。因此,当您为该变量分配新函数时,.onclick
不会受到影响。
要完成你想要做的事情,你需要第二个功能。您的处理程序调用第二个可以替换的函数。
var changeable = function () {
console.log("aaaa");
};
var publicFunc = function () {
changeable();
};
var button1 = document.getElementById('button1');
var button2 = document.getElementById('button2');
button1.onclick = publicFunc;
button2.onclick = publicFunc;
//change the behavior
changeable = function () {
console.log('bbb');
};
答案 1 :(得分:3)
术语存在问题,即指针与引用。没有办法在JavaScript中模拟C ++引用。
也就是说,您无法更改一个变量并影响对它的其他引用。
要解决您的问题,您可以执行以下操作
var publicFunc = function(){console.log('aaa');},
button1 = document.getElementById('button1'),
button2 = document.getElementById('button2');
button1.onclick = button2.onclick = function(e) {
publicFunc();
};
publicFunc = function(){console.log('bbb');};
在不同的情况下说同样的事情(引用一个对象,一个函数是一个对象)
var a = {prop: 2};
var b = a;
a = {anotherprop: 3};
// b still points to the original object {prop:2}
在这种情况下解决这个问题,你必须添加另一个间接级别,就像我们对函数一样;
var a = {indirection: {prop:2} };
var b = a;
a.indirection = {anotherprop: 3};
最后,这只能用于对象,即它永远不会使用数字,布尔值或字符串,因为它们总是按值传递(除非你使用包装器new Number(), new String...