我的代码很大,所以我会保持简短。我正在尝试触发 Select 属性的 onchange 事件。问题是,当我触发它时,我收到此错误:
Uncaught TypeError: object is not a function
由于我的代码很大,我将向您展示我在何处声明 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])
}
})
}
这是我触发 onchange 事件的时间:
show_time: function () {
/*.....*/
javascript: document.getElementById("date").innerHTML = ScoreResult;
document.getElementById("set-parts").selectedIndex = 1;
document.getElementById('set-parts').onchange();
}
最佳答案
我不使用 jquery,但在 JavaScript 中,addEventListener(eventName, ...) 和 on*eventName* = function(){} 的工作方式有所不同。
我认为现代库不会使用 on*eventName* 接口(interface),原因很简单:我只能容纳一个监听器。但 on*eventName* 仍然存在以支持旧代码。
现在,在您的特定情况下,当您添加事件时,您的库正在使用 addEventListener/removeEventListener/dispatchEvent 下划线 DOM 接口(interface)。这不会为您的回调设置旧的 on*eventName* 属性,因此您可以直接调用它的唯一方法是使用 DOM 方法dispatchEvent(或您的库包装器)以及类型为“change”的 Event 对象来分派(dispatch)事件。这就是“new Event('change')”的作用。如果您需要向事件传递额外的属性,您可以像这样创建它:
new Event('change', { foo : 1, bar : 'hello, world!' })
并且这些属性将在您设置参数的名称下的监听器回调参数[0]中可用(在您的情况下,您将其留空)。
关于javascript - 未捕获的类型错误 : object is not a function (calling onchange function),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24355033/