相关疑难解决方法(0)

普通的Javascript对象可以有事件吗?

普通的Javascript对象可以附加事件吗?说这样的话:

obj = new Object();
obj.addEventListener('doSomething', foo, true);
Run Code Online (Sandbox Code Playgroud)

我知道我可以用jQuery做到这一点,但是没有任何库可以吗?

javascript events object

16
推荐指数
2
解决办法
2057
查看次数

常规Javascript对象可以调度事件,还是只能用于DOM节点?

我已经创建了一个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解决方案,请告诉我!

javascript dom

5
推荐指数
1
解决办法
211
查看次数

如何在javascript中为自定义对象调度事件

为视频元素创建包装器。

function YMplayer() {
    this.video = document.getElementById("video"); /* video object */
    this.addEvents();
}

YMplayer.prototype.addEvents = function () {
    var obj = this.video;
    var events = ["load","click"];

    if (obj) {
        if (obj.addEventListener) {
            for (var i in events) {
                obj.addEventListener(i, this.dispatch(i), false);
            }
        } else if (obj.attachEvent) {
            for (var j in events) {
                obj.attachEvent("on" + j, this.dispatch(j));
            }
        }
    }

};

/* Method to dispatch the events */

YMplayer.prototype.dispatch = function (evt) {
    var evtt = document.createEvent("Events");
    evtt.initEvent(evt, true, false); …
Run Code Online (Sandbox Code Playgroud)

html javascript event-listener dispatchevent

1
推荐指数
1
解决办法
3584
查看次数

标签 统计

javascript ×3

dispatchevent ×1

dom ×1

event-listener ×1

events ×1

html ×1

object ×1