未捕获的TypeError:对象不是函数(调用onchange函数)

时间:2014-06-22 19:42:57

标签: javascript jquery html

我的代码很大,所以我会保持简短。我要点击选择属性的onchange事件。问题是当我开火时我得到了这个错误:

Uncaught TypeError: object is not a function

由于我的代码很大,我会向你展示我在decalare onchange事件中的代码,以及当我触发它时。

这是在声明onchange函数的时候:

 function e(b, c) {
        function a() {
            if (b.current_modal) {
                b.current_modal.className = "hide"
            }
            f("overlay").className = "hide"
        }
        jigsaw.UI.close_lightbox = a;
        Util.$("overlay").click(a);
        Util.$("set-parts").change(function () {
            if (this.parts != 9) {
                jsaw.set_image("images/puzzle.jpeg")
            } else {
                jsaw.set_image("images/puzzle1.jpeg")
            }
            c.emit(jigsaw.Events.PARTS_NUMBER_CHANGED, +this.value);
            c.emit(jigsaw.Events.RENDER_REQUEST)
        });
        Util.$("game-options").click("a", function (h) {
            if (jigsaw.Events[this.id]) {
                h.preventDefault();
                c.emit(jigsaw.Events[this.id])
            }
        })
    }

这是我开火时的事件:

show_time: function () {
           /*.....*/

        javascript: document.getElementById("date").innerHTML = ScoreResult;
        document.getElementById("set-parts").selectedIndex = 1;
        document.getElementById('set-parts').onchange();


    }

1 个答案:

答案 0 :(得分:1)

我没有使用jquery,但在JavaScript中,addEventListener( eventName ,...)和on * eventName * = function(){}的工作方式有所不同。< / p>

我认为现代库不会在* eventName *接口上使用,原因很简单:我只能拥有一个监听器。但on * eventName *仍然支持遗留代码。

现在,在您的特定情况下,当您添加事件时,您的库正在使用addEventListener / removeEventListener / dispatchEvent下划线DOM接口。这不会将* eventName *属性的遗留问题设置到回调中,因此通过使用DOM方法dispatchEvent(或您的库包装器)使用类型为&#39的Event对象调度事件,可以直接调用它。 ;变更&#39 ;.这就是&#34;新活动(&#39;改变&#39;)&#34;确实。如果您需要将额外的属性传递给事件,您可以像这样创建它:

new Event('change', { foo : 1, bar : 'hello, world!' })

这些属性将在您设置参数的任何名称下的侦听器回调参数[0]中可用(在您的情况下,您将其留空)。