在jquery中触发事件

时间:2011-08-06 17:07:11

标签: jquery

这是我的代码结构,我从其他人那里看到并试图理解它。我相信它的封闭风格而不是插件风格?也许有人可以为我澄清一下,如果它的封闭风格。

插件样式。以下是一些一般性问题。

  1. 那么变量NP在全局名称空间中是否正确?并且刚刚使用过 作为关闭及其内部公共方法的参考。
  2. 在方法之前使用NP(它是命名空间)只是一种方法 从封闭之外引用该方法。
  3. 如果我将NP设置为null,它会销毁并允许垃圾收集 NP内部的一切,包括所有变量。
  4. 这是一个更大的问题,所以我会把它自己解决。 当我从内部方法 actionMethod()触发事件时 我希望能够从另一个js文件中接收该事件。例如home.js

    home.js

        $(function(){
    
          NP.bind("CHANGED", event_handler);
    
         function event_handler(evt, data ){
           // do something....
         }
    
         $('#button').click(function(){
          // call my public method in my NP plugin
          NP.PublicMethod();
         });
    
      });
    

    关闭(风格)

    var NP = function(namespace){
    
         var innerVariable = "the outside scope can't here me";
    
         finction innerMethod(){
            //does some inner functionality to the closure
         }  
    
         namespace.PublicMethod = function(){
           // does some calling of inner function.
          // user can access this method from the myplugin directly.
          // example: NP.PublicMethod();
         }
    
         function actionMethod(){
           // trigger an event so others outside this closure can react
           namespace.trigger("CHANGED");
         }
    
        }(NP || {});
    

    如果有人可以回答前3个问题,请回答有关触发事件的更大问题。提前致谢

    更新

    ShankarSangoli通过从DOM元素触发事件的例子。 这里的问题是我有一个dom元素作为我的近距离内的一个关闭按钮,但home.js不知道它或没有引用,也不应该。所以我需要一种方法来监听NP对象级别从它发出的事件。作为测试我尝试了下面的代码,它的工作原理。不知道为什么它不是DOM元素,但在大多数语言中,您可以从大多数通用对象触发事件。在这种情况下,NP实际上是一个对象,或者我疯狂地认为它是一个对象。

    关闭对象

       function actionMethod(){
               // trigger an event so others outside this closure can react
               $(namespace).trigger("CHANGED");
             }
    

    home.js

    $(TWCCP).bind("CLOSED_POPUP", onClosePopup);
    

    现在我对此非常困惑。这怎么可能呢???

1 个答案:

答案 0 :(得分:1)

  1. 是的,NP位于全局命名空间中。
  2. 是的,为了使用NP的任何方法,您必须说NP.methodName();
  3. 如果设置NP = null,那么它将被销毁,javascript将负责垃圾收集并销毁它的内部变量。
  4. 除非NP.bind是与dom元素关联的jquery对象,否则不能使用NP

    触发任何事件的方式如下

    $("domElementSelector").trigger("click");//Or any otherr event, even custom event like in your case CHANGED can be triggered.
    

    对于你的最后一部分,试试这个

    <强>封闭(风格)

    var NP = function(namespace){
    
         var innerVariable = "the outside scope can't here me";
    
         finction innerMethod(){
            //does some inner functionality to the closure
         }  
    
         namespace.PublicMethod = function(){
           // does some calling of inner function.
          // user can access this method from the myplugin directly.
          // example: NP.PublicMethod();
         }
    
         function actionMethod(){
           // trigger an event so others outside this closure can react
           $(namespace).trigger("CHANGED");
         }
    
         namespace.bind = function(eventType, handler)
         {
            $(namespace).bind(eventType, handler);
         }
    return namespace;
    
        }(NP || {});
    

    <强> home.js

    $(function(){
    
          NP.bind("CHANGED", event_handler);
    
         function event_handler(evt, data ){
           // do something....
         }
    
         $('#button').click(function(){
          // call my public method in my NP plugin
          NP.PublicMethod();
         });
    
      });