我正在执行的脚本中具有各种功能,但是尽管两个功能彼此了解(不是作用域问题)和事件监听器触发,但其中一个未被调用。
我有一个input
range element,带有两个事件侦听器,如下所示:
onchange event on input type=range is not triggering in firefox while dragging
我的代码是这样的:
function initZoom() {
var self = this,
wrap = self.elements.zoomerWrap = document.createElement('div'),
zoomer = self.elements.zoomer = document.createElement('input');
self.elements.viewBox.insertAdjacentElement('afterend',wrap);
wrap.appendChild(zoomer);
function change() {
console.log("Fire Before On Zoom!");
onZoom.call(self, {
value: parseFloat(zoomer.value),
origin: new TransformOrigin(self.elements.img),
viewportRect: self.elements.enclosedCrop.getBoundingClientRect(),
transform: Transform.parse(self.elements.img)
});
}
self.elements.zoomer.addEventListener('input', change); // this is being fired twice on keypress
self.elements.zoomer.addEventListener('change', change);
}
如您所见,我将两个元素(wrap
和zoomer
)添加到了DOM中。这正在工作,并且我也有两个事件侦听器,它们也在工作。也就是说,当我操作范围输入时,我将Fire Before On Zoom!
打印到控制台。
但是,我的onZoom
通话似乎从未触发。我在这里:
function onZoom(ui) {
console.log("Fire Before Apply CSS!");
}
console.log()
永远不会打印到控制台,并且该函数中的其他代码也永远不会执行。如果我将第一个console.log()
放在onZoom.call()
之后,它也不会打印。如果我将, onZoom
添加到console.log("Fire Before On Zoom!")
,它将打印onZoom
的函数体,因此知道它存在...
那我的onZoom.call()
怎么了?