2012-01-09 76 views
2

我剛開始的jQuery編寫插件。我發現一個很好的教程如何開始,但有一點我錯過了。我想爲每個元素註冊一個獨立的插件對象,我需要它們的事件。傳遞事件到jQuery的插件

下面的代碼我大氣壓:

(function($){ 
    var MyPlugin = function(pElement, pOptions) 
    { 
     var element = $(pElement); 
     var object = pElement; 
     var settings = $.extend({ 
      param: 'defaultValue' 
     }, pOptions || {}); 

     this.onfocus = function() { 
      element.val('Focus'); 
     }; 

     this.onblur = function() { 
      element.val('Blur'); 
     } 

     // DO I NEED THIS? 
     object.onfocus = this.onfocus; 
     object.onblur = this.onblur; 
    }; 

    $.fn.myplugin = function(options) 
    { 
     return this.each(function() 
     { 
      var element = $(this); 
      if (element.data('myplugin')) { return }; 
      var myplugin = new MyPlugin(this, options); 
       element.data('myplugin', myplugin); 

     }); 
    }; 
})(jQuery); 

我需要我的公開法「聚焦狀態」和「的onblur」從「此」到「對象」複製?有沒有更好的辦法?

回答

1

寫的jQuery插件的最佳指導可能是jQuery's own

jQuery's event system是處理事件給你的插件的最佳途徑。如果你正在使用jQuery 1.7+(我建議,如果可能的話),.on().off()是你的工作母機。您不僅可以綁定瀏覽器事件,如重點模糊,你可以創建一個像「iamasuperstar」完全自定義的活動,並與this.trigger('iamasuperstar')手動觸發它們。

所以,你會做這樣的事情給你的插件:

element.on('focus', function() {})

element.on('blur', function() {})

...和其他任何你需要的。

1

爲什麼不:

object.onfocus = function() { 
     element.val('Focus'); 
    }; 

    object.onblur = function() { 
     element.val('Blur'); 
    } 
+0

媽的,它是那麼容易。我認爲它更復雜,我無法使用我的對象屬性。謝謝! – Daniel 2012-01-09 15:28:44