zoukankan      html  css  js  c++  java
  • Javascript 自定义事件 (custom event)

    Javascript 中经常会用到自定义事件。如何创建一个简单的自定义事件呢?在创建自定义的事件之前,我们应该考虑一下和事件有关的东西。例如 click 事件,首先我们要能注册一个click事件(在一个button上绑定click事件),然后要能够触发这个事件,最后事件不需要的时候要能够移除事件。

    我们可以借助JQuery 的方法来实现自定义事件,请看下面的例子:

        <div id="myDiv">myDiv</div>
        <script type="text/javascript">     
            $(function () {
                $("#myDiv").bind("myClickEvent", function () { //bind myClickEvent
                    alert("This is my click event.");
                });
                $("#myDiv").trigger("myClickEvent"); //trigger myClickEvent

            $("#myDiv").unbind("myClickEvent"); //remove myClickEvent
            $("#myDiv").trigger("myClickEvent");

            });
        </script>

    在上面的例子中创建了一个最简单的自定义事件:myClickEvent,并且使用了JQuery 的trigger()方法触发了它。最后使用$.unbind() 来移除事件,再触发事件 就不会有任何效果。

    有了上面的例子,我们可能会想如何才能自己实现一个自定义事件的方法。如果不使用jQuery的方法,自己用原生的javascript 来自己定义一个方法,会不会很酷呢。。。

         function EventTarget() {
                this.handlers = {};
            }
            EventTarget.prototype = {
                constructor: EventTarget,
                addHandler: function (type, handler) {
                    if (typeof this.handlers[type] == "undefined") {
                        this.handlers[type] = [];
                    }
                    this.handlers[type].push(handler);
                },
                fire: function (event) {
                    if (!event.target) {
                        event.target=this;
                    }
                    if (this.handlers[event.type] instanceof Array) {
                        var handlers = this.handlers[event.type];
                        for (var i = 0, len = handlers.length; i < len; i++) {
                            handlers[i](event);
                        }
                    }
                },
                remvoeHandler: function (type, handler) {
                    if (this.handlers[type] instanceof Array) {
                        var handlers = this.handlers[type];
                        for (var i = 0, len = handlers.length; i < len; i++) {
                            if (handlers[i] === handler) {
                                break;
                            }
                        }
                        handlers.splice(i,1);
                    }
                }
            }
            function myClickFun() {
                alert("This is my custom event.");
            }
            var target = new EventTarget();
            target.addHandler("myClickEvent", myClickFun);
            target.fire({ type: "myClickEvent" });
            target.remvoeHandler("myClickEvent",myClickFun);
            target.fire({ type: "myClickEvent" });
  • 相关阅读:
    android stdio 打包
    ASP调用WEBSERVICE并对返回结果进行解析时遇到的问题
    ASP导出数据到excel遇到的一些问题
    HTML + CSS短标题(二,三,四文字长度)两端对齐的方式
    下拉列表被flash覆盖的解决方法
    html加C#上传文件
    实际项目中遇到EF实体类的操作问题及操作方法
    解决ASP.NET上传文件大小限制------(转载人家的博客很好用,略作修改)
    关于ASP.NET MVC的权限认证的一些总结
    Django验证码
  • 原文地址:https://www.cnblogs.com/bg57/p/4170676.html
Copyright © 2011-2022 走看看