我有一个SELECT元素,每次点击OPTION时都会通过Javascript将其值添加到隐藏的INPUT(以及每个选择的可视化表示),并且我希望能够监视另一个Javascript函数的更改。为了模块化,我无法将第二个函数集成到第一个函数中。我也不想轮询隐藏的INPUT的值来避免黑客攻击。目前我正在使用包含SELECT和隐藏INPUT的DIV上的onclick事件,但这也很糟糕。您是否知道监视隐藏的INPUT元素以进行更改的方法?
答案 0 :(得分:3)
所以,你有:
为什么不创建自己的“事件”,即功能A在完成工作时调用/调度?
我相信大多数Javascript框架都很容易支持自定义事件的概念,但它只是一系列函数调用。
例如,创建一个对象D,它表示单个事件的调度程序。是的,这很愚蠢,但我试图保持简单的概念。这个对象D包含一个已为其事件“注册”的函数列表,当调度该事件时,它会调用这些函数。
类似的东西:
var d = (function() {
var funcs = [];
function fire() {
for (var i=0; i<funcs.length; ++i) {
funcs[i].call();
}
}
function register(newfunc) {
funcs.push(newfunc);
}
return {
fire: fire,
register: register
};
})();
你还有两件事要做 - 让函数A触发事件:
function A() {
// do stuff to update the INPUT
d.fire();
}
以及onload
,“注册”事件发生时要调用的函数B:
d.register(B);
这种方法保持了模块分离原则(或其所谓的任何原则),因为A和B对彼此一无所知,只需知道第三个对象。