我现在要自己创建一个js对象,用于封装一个activeX插件.
这个ActveX控件有一个事件,在HTML中可以直接使用的.现在我想做一个js对象,封装这个控件,并且为这个js对象注册一个事件.现在没有搞清楚,自己创建的js对象可以有事件么?如何写事件代码呢?

解决方案 »

  1.   

    可以。不是语法问题,而是思路问题。要创建有激发事件的对象,那你同样就得创建能发起事件的环境。否则,你的事件处理函数就英雄无用武之地。所以你可以先给JS对象(比如叫Theforever_csdn)增加一个方法,比如on_Theforever_csdn(可选对事件传入参数,比如当类似键盘事件那样有多种值内容时),在里面写这个事件应该处理的任务即可。然后需要在JS里创建能激发这个事件处理函数的“事件驱动机制”。其实很简单:假如你想在变量Theforever_csdn.name或对象Theforever_csdn发生改变时激发你这个事件,那么你可以作一个方法把改变这个目标对象的任务由它完成,同时在改变完成后,结束之前去调用一下  Theforever_csdn.on_Theforever_csdn(可选参数); 就可以了。当你以后处理那个变量或对象,通过这样封装的方法去做,自然可以激发你的那个事件。但在你实际编写时,要根据实际应用情况,注意选择是处理对象类还是对象实体。
      

  2.   

    事件的实现机理很简单的,类似回调,举例:
    function obj()
    {
      this.show=function()
      {
        if(this.beforeshow) this.beforeshow();
        document.body.innerHTML="<div>测试控件</div>";
        if(this.onshow) this.onshow();
      }
    }
    把obj看作一个控件类,该类就实现了两个事件,beforeshow与onshow,分别在控件显示前和显示后执行使用时:
    var test=new obj();
    test.beforeshow=function(){alert('控件开始加载');}
    test.onshow=function(){alert('控件加载成功');}
    test.show();这样控件显示前后就会分别执行两个事件函数了
      

  3.   

    你的需求可以实现:<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script>
    $(function(){
    // 自定义一个对象
    var obj = {};

    // 给这个对象绑定一个事件,事件的名称可以随意
    $(obj).bind("myClick", function(){
    alert("触发了obj的myClick事件");
    });

    // 点击test按钮,触发这个obj的myClick事件
    $("#test").click(function(){
    $(obj).trigger("myClick");
    });
    });
    </script>
    <body>
    <input id="test" value="test" type="button" />
    </body>