黃偉榮的學習筆記

軟體的世界變化萬千,小小的我只能在這洪流奮發向上以求立足。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

jQuery自製Plugin-Bind事件函式時檢查有沒有Bind過

Posted on 2010-10-20 21:55  黃偉榮  阅读(328)  评论(0编辑  收藏  举报

因為寫一個豐富Ajax的網站,JavaScript一定會寫很多,有時莫明奇妙的一個HtmlElement Bind二個事件函式以上,可能照成click一次,卻Post二次以上,原因是不同的地方呼叫初始化的函式,所以我就自己寫了一個Plugin去避免這個問題。

 

(function ($) {
    //jquery object擴展
    $.extend($.fn, {
        BindCheck: function (id, type, callback) {
            ///<summary>檢查有沒有重覆的id,沒有才Bind,如果沒有給id,就判斷有沒有重覆的type</summary>

            if (arguments.length == 2) {
                callback = type;
                type = id;

                if (!(this.data("events") && this.data("events")[type])) {
                    this.bind(type, callback);
                }
            } else {
                var bindCheck = $.data(this,"BindCheck") || $.data(this,"BindCheck", {})
                if (!bindCheck[id]) {
                    this.bind(type, callback);
                    bindCheck[id] = true;
                } 
            }
        }
    });
})(jQuery)

 

範例

HTML:

<input id="test1" type='button' value="test 1"/>
<input id="test2" type='button' value="test 2"/>

 

JS:

$(function(){
    $("#test1").BindCheck("click",function(){ alert(1)});    
    $("#test1").BindCheck("click",function(){ alert(2)}); 
    $("#test1").BindCheck("click",function(){ alert(3)});
    
    $("#test2").BindCheck("test2-1","click",function(){ alert(1)});    
    $("#test2").BindCheck("test2-1","click",function(){ alert(2)}); 
    $("#test2").BindCheck("test2-2","click",function(){ alert(3)}); 
    $("#test2").BindCheck("test2-2","click",function(){ alert(4)}); 
})

 

說明

 

2-5是設定test1的click 事件函式,以type做區隔,一個type只會Bind一次,所以按下test1,只會 alert(1)

6-9是設定test2的click 事件函式,以id做區隔,一個id只會Bind一次,所以按下test2, 會alert(1)、alert(3)