我有一个 SELECT 元素,每次单击 OPTION 时,它都会通过 Javascript 将其值添加到隐藏的 INPUT 中(以及每个选择的可视化表示),并且我希望能够监视另一个 Javascript 函数的更改。为了模块化,我不能将第二个功能集成到第一个功能中。我也宁愿不轮询隐藏的输入值以避免黑客攻击。目前,我在包含 SELECT 和隐藏的 INPUT 的 DIV 上使用 onclick 事件,但这也很 hack-ish。你知道一种方法来监控隐藏的 INPUT 元素的变化吗?
问问题
667 次
1 回答
3
所以你有了:
- 函数 A,它更新隐藏的 INPUT。
- 函数 B,应在更新 INPUT 时调用。
为什么不创建一个您自己的“事件”,该函数 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 彼此一无所知,只需要知道第三个对象。
于 2009-04-28T05:15:26.540 回答