2012-02-23 60 views
0

我喜歡讓我的代碼儘可能幹,並且想知道以下是否可能。 我需要多次重複使用下面的代碼,唯一的區別就是我在下面的函數中做了什麼。jQuery重構函數

.on("click", "a", function(e) {}) 

我可以只複製addToBooking功能,給它一個不同的名稱,請單擊處理程序的細微變化,但那種感覺浪費和重複。

我可以將代碼塊傳遞給addToBooking函數嗎? 或者也許還有另一種很酷,有效的方式,我不知道。

完整的代碼塊

var addToBooking = function(that, event) { 
    var left, top; 

    event.stopPropagation(); 

    //Turn off all calendar tracking 
    $(".track").off(); 

    //Get proper sticky positioning (Checks to make sure it wont display off screen) 
    left = getPosition(".add_to_booking", "left"); 
    top = getPosition(".add_to_booking", "top"); 

    //Position sticky, display and listen for click event to see what to do next 
    $(".add_to_booking").css({top: top, left: left}) 
         .fadeIn('fast') 
         .on("click", function(e) { e.stopPropagation(); }) 
         .on("click", "a", function(e) { 
         if($(this).text() === "YES") { 
          //Close dialog 
          closeTT(); 

          //Open new add to booking box 
          addBooking(that, event); 

         } else { 
          closeTT(); 
         } 
         }); 
} 

回答

2

通在功能和分配給它

var addToBooking = function(that, event, custFnc) { 
    ... 
    ... 
    .on("click", "a", custFnc); 
} 

Fiddle

爲了傳遞參數,你需要使用call()

jQuery(function(){ 

    function hey(evt, test){ 
     var text = jQuery(this).text(); 
     alert(text + ":" + test); 
    } 


    function addClick(custFnc){ 
     var test=99; 
     jQuery("#foo").on("click", 
      function(e){ 
       custFnc.call(this, e,test); 
      } 
     ); 
    } 

    addClick(hey); 
}); 

Fiddle

+0

在你的例子中,我將如何從該函數傳遞變量?看到這裏,它不起作用,但你有這樣的想法:http://jsfiddle.net/SqZm4/1/ – EasyCo 2012-02-23 05:58:52

+0

編輯向您展示如何使用call()傳遞參數 – epascarello 2012-02-23 13:32:08