2011-09-07 53 views
5

你如何處理插件內的點擊事件?一個簡單的描述是我想要一個插件來檢測點擊然後更新另一個元素。你如何處理jQuery插件中的點擊事件?

實例應用:

$("#some_id").myPlugin("another_id");

示例插件:

(function($){ 

    $.fn.myPlugin=function(update_id){ 

    .click({$(update_id).html("content_upated");}); 

    } 

})(jQuery); 

我不知道如何編寫插件裏面的。點擊事件。任何示例都會有所幫助。謝謝。

回答

13

你應該做兩兩件事:

  1. 使用this引用其被應用
  2. Namespace your events插件的元素,這樣他們就可以很容易地在以後解開

請嘗試以下方法

(function($){ 

    $.fn.myPlugin = function(update_id) { 

     this.bind("click.myPlugin", function() { 
     $(update_id).html("content_upated"); 
     }); 

    }; 

})(jQuery); 

有關如何正確開發jQuery插件的更多信息,您應該閱讀jQuery plugin authoring上的頁面。你錯過了其他重要的細節,比如接受一個參數對象。

+3

使用事件命名空間+1肯定是一個好主意。我唯一的建議是在綁定它之前''.unbind()'相同的名稱空間事件,以防止在同一元素上多次調用插件時重複事件處理程序。 –

+0

@Matt非常好的建議 – meagar

+0

+1,因爲它涵蓋了我沒有考慮過的命名空間以及很好的答案。 – Kasaku

-1
(function($){ 
    $.fn.myPlugin=function(update_id){ 
     this.click(function(){ $(update_id).html("content_upated"); }); 
    } 
})(jQuery); 

確保update_id是一個有效的選擇。

+0

誰低估了我,你能解釋一下爲什麼 –

+6

可能是因爲你沒有花時間在你的答案中解釋任何事情,所以這不是一個答案。更重要的是你解釋*爲什麼*和*你怎麼解決某些問題,而不是簡單地發佈固定代碼。 – meagar

0

您將調用.each()來遍歷匹配的元素,或者您可以通過常規的jQuery方法進行附加。

(function($) 
{ 
    $.fn.myPlugin = function(anotherIdentifier) 
    { 
      // this.click is equivalent to $(identifier).click() 
      this.click(function() 
      { 
       // Thing to do 
      }); 
    }; 
})(jQuery); 
1

使用this該插件正在對調用訪問對象:

(function($){ 
    $.fn.myPlugin=function(update_id){ 
     this.click(function() { $(update_id).html("content_upated"); }); 
    } 
})(jQuery); 

請注意,您的使用需要包括在這個例子中,id選擇,或者你需要把它列入你的點擊功能:

$("#some_id").myPlugin("#another_id"); 
0
(function($){ 
    $.fn.myPlugin=function(update_id){ 
     this.click(function(){ $(update_id).html("content_upated"); }); 
    } 
})(jQuery); 

確保update_id是一個有效的選擇。