我已将事件附加到文本框中addEventListener.它工作正常.当我想以编程方式从另一个函数触发事件时,我的问题出现了.
我该怎么做?
我写了一个应该在移动设备上运行的html5应用程序.90%的时间它工作正常,但在某些设备(主要是androids 4.0+)中,点击事件会触发两次.
I know why that happens, I'm using iScroll 4 to simulate native scrolling and it handles the events that happen inside the scroll.(line 533 dispatches the event if you're interested) Most of the time it works fine but in certain devices both the iScroll dispatched event and the original onClick event attached to the element are fired, so the click happens twice. I can't find a pattern on which devices this happen so I'm looking for alternatives to …
我正在寻找一种方法来使用javascript或jquery在全局和内部的requireJS模块中调度事件.
我希望能够在我的js文件中说:
dispatchEvent(myCustomEventWithSomeData);
Run Code Online (Sandbox Code Playgroud)
然后在应用程序的其他部分添加一个监听器,如下所示:
addEventListener(“type Of Event”, executeThisFunction);
Run Code Online (Sandbox Code Playgroud)
这有可能使用jquery吗?还是其他任何方式?并且潜在的解决方案是否可以在requireJS模块中工作,而这些模块不是全局javascript对象?
另外,我如何创建一个泡泡事件.因此,如果我希望事件仅在代码的特定部分执行,则不会全局调度?
我已经创建了一个Javascript伪类,我希望它能够调度自定义事件.不幸的是,似乎只有DOM节点能够调度事件.因此,我被迫将DOM节点与我的伪类的每个实例相关联,以便DOM节点可以代表我的类调度事件.
我希望能够将事件监听器直接添加到我的伪类的实例中.不幸的是,因为伪类无法调度它自己的事件,所以我必须将事件监听器添加到关联的DOM节点.
当我这样做时,我的事件处理函数接收对DOM节点而不是伪类实例的引用.在我可以调用它的方法之前,我必须确定DOM节点属于哪个伪类实例.
我试图尽可能保持我的Javascript和DOM之间的清晰分离.当然,有时将伪类实例与DOM元素相关联是有意义的,但我不希望这是一个绝对的要求.
我的样板代码:
jQuery(document).ready(function($){
var cat = new Animal($('#cat'), 'Larry', 'Meow');
cat.domElement.on('spoken', function(event){
var classInstance = $(this).data('instance');
console.log(classInstance.firstName + ' has spoken');
});
cat.speak();
});
Run Code Online (Sandbox Code Playgroud)
我的假类
(function(){
window.Animal = Animal;
function Animal(domElement, firstName, sound) {
// Save a reference to the DOM node
this.domElement = domElement;
// Give the DOM node a reference to this class instance
this.domElement.data('instance', this);
this.firstName = firstName;
this.sound = sound;
}
Animal.prototype.speak = function() {
console.log(this.sound);
this.domElement.trigger('spoken');
};
}(window));
Run Code Online (Sandbox Code Playgroud)
旁注:我需要支持IE8等传统浏览器.我非常努力地使用正确的Javascript事件模型,而不是依赖于jQuery.不幸的是,我无法为dispatchEvent,addEventListener,removeEventListener,Event,CustomEvent等找到足够的polyfill .jQuery提供了一个具有熟悉语法的优秀抽象层,我的团队无论如何都会定期使用它.但是,如果有一个干净的,香草味的Javascript解决方案,请告诉我!
所以,我有这种好奇心已经有一段时间了。我想知道,addEventListener幕后是如何运作的。我知道它的作用,但我只是无法理解它是如何做到的。
我检查了许多链接和资源,这是最接近我正在寻找但仍然没有成功的一个。
为了澄清我真正在寻找什么,我想知道如何创建自己的addEventListener函数,将第一个参数作为事件名称,将第二个参数作为接受该eventArgs参数的回调。
如何为javascript类创建自定义事件?
示例代码
function somefunction(url){
this.h_world = function(){/*some random code to do*/ };
}
var hw = new somefunction();
Run Code Online (Sandbox Code Playgroud)
现在,举一个非常简单的例子,如何在hw.h_world完成执行并为其返回一些数据时为此创建一个自定义事件处理程序?
例如
var hw = new somefunction();
hw.h_world();
hw.finished_h_world = function(somedata){
alert(somedata);
}
Run Code Online (Sandbox Code Playgroud)