2012-07-02 106 views
1

我想寫我的第一個jquery插件,但我遇到了一些困難。jquery,在回調函數參數設置

代碼片段:

在這裏,我初始化我的插件和設置時MyEvent發生時應該執行的功能。

$("#myMap").MyPlugin({ myEvent: function() { alert("test"); } }); 

這是我的插件腳本

function setEvents(options) { 
      $.each(options, function(event, fn) { 
       if (typeof (fn) == 'function') { 
        if (event == "myEvent") { 
         $(myDiv).click(fn); 
        } 
       } 
      }); 
     } 

這正常功能,但我想從插件獲取信息,而即使發生。 基本上我想接收一個參數,我已經設置了這個「setEvents」函數。

$("#myMap").MyPlugin({ myEvent: function(myParam) { alert(param); } }); 

我彷彿看不出這一個,有人可以指出我在正確的方向。

UPDATE:我目前的插件腳本的更完整的片段

(function($) { 
    var defaults = { 
     width: 300, 
     height: 300, 
     myEvent: null 
    }; 

    $.fn.myPlugin = function(options) { 
     var options = $.extend(defaults, options); 
     var myDiv = $(this); 
     return this.each(function() { 
      setEvents(options); 
     }); 
})(jQuery); 
+0

這似乎不是完整的代碼。請發佈完整的代碼。 – Imdad

+0

我不關注。你究竟想要什麼能夠訪問?你可以編輯提供一個更清晰的例子嗎? – Utkanos

+0

@BBQ,你想要一個特定的參數傳遞給你的處理程序,還是你希望它接收整個'options'哈希? –

回答

2

由於myEvent事件映射到click事件由你的插件,你可以爲了傳遞一個參數映射click()它最終被傳遞到您的處理程序:

if (typeof(fn) == "function") { 
    if (event == "myEvent") { 
     $(myDiv).click({ 
      param: myParam 
     }, fn); 
    } 
} 

然後,你可以寫:

$("#myMap").MyPlugin({ 
    myEvent: function(event) { 
     alert(event.data.param); 
    } 
}); 
+0

感謝Frederic。它適用於一些小調整。我必須將其更改爲'args.data.param'。有沒有簡單的方法來繞過參數圖的東西,只是接收一個字符串作爲參數? – BBQ

+1

@BBQ,不幸的是,jQuery處理程序被設計爲接收通過'event'對象傳遞的單個參數哈希(我在我的答案中使用了錯誤的名稱,現在已經修復)。您可以在該散列中傳遞單個值,但必須有散列。 –