2

我有一个 SELECT 元素,每次单击 OPTION 时,它都会通过 Javascript 将其值添加到隐藏的 INPUT 中(以及每个选择的可视化表示),并且我希望能够监视另一个 Javascript 函数的更改。为了模块化,我不能将第二个功能集成到第一个功能中。我也宁愿不轮询隐藏的输入值以避免黑客攻击。目前,我在包含 SELECT 和隐藏的 INPUT 的 DIV 上使用 onclick 事件,但这也很 hack-ish。你知道一种方法来监控隐藏的 INPUT 元素的变化吗?

4

1 回答 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 回答