2010-07-06 51 views
0

我知道這裏有很多類似的問題,但我已經嘗試過所有這些都無濟於事......非常感謝您的幫助。使用jQuery將參數傳遞給JavaScript對象事件

我所試圖做的事: 我想在註冊一個一對多的參數傳遞到每一個複選框「click」事件(見下文)。

什麼工作: 我可以不帶任何參數的情況下注冊,並單擊事件引起了......但我需要傳遞到包含JavaScript網格對象的引用(由於其他原因)。

WHAT失敗 我已經試過各種形式的 「this.MutuallyExclusiveCheckBoxHandler =函數(網格){}」 的無濟於事。

一個想法: 我「認爲」咖喱可能是答案,但我不知道如何做得很好 - 還不夠。

這個區域實例化電網和註冊複選框

<script type="text/javascript"> 
<!-- 
    // CLASS 
    function CommitImporterGrid() { 
     // PROPERTIES 
     this.Toaster = new Toaster(); 
     this.CheckBoxes = new Array(); 

     // METHODS 
     this.RegisterMutuallyExclusiveCheckBox = function(clientId) { 

      var checkBox = $j('input:checkbox#' + clientId); 

      // HERE: "I need to pass a reference to the grid somehow" 
      $j(checkBox).click(this.MutuallyExclusiveCheckBoxHandler); 

      this.CheckBoxes.push(checkBox); // Append to array 
     } 
     this.MutuallyExclusiveCheckBoxHandler = function() { 

      // The checkbox events break when I try to add a parameter. 
      var myGrid = "I need to retreive the grid reference here somehow"; 

      if (!$j(this).is(':checked')) { // They clicked on the same checkbox 
       this.checked = true; 
       return; 
      } 

      // ...other code... 
     } 
    } 

    // CLASS INSTANCE 
    var myGrid = new CommitImporterGrid(); 

    // DOM EVENT: Document.Ready() 
    $j(document).ready(function() { 

     // DYNAMIC REGISTRATION 
     myGrid.RegisterMutuallyExclusiveCheckBox('chkCommitImporter01'); 
     myGrid.RegisterMutuallyExclusiveCheckBox('chkCommitImporter02'); 
    }); 
--> 
</script> 

回答

1

使用.bind()並傳遞事件數據(假設你的網格當前對象):

// HERE: "I need to pass a reference to the grid somehow" 
checkBox.bind('click', {grid: this}, this.MutuallyExclusiveCheckBoxHandler); 

(你不需要通過checkbox到jQuery的,這已經是一個jQuery對象)

,改變你的方法:

this.MutuallyExclusiveCheckBoxHandler = function(event) { 
     var mygrid = event.data.grid; 
     //... 
} 

(你可以可以訪問事件數據通過event.data

+0

這不會得到正確的'this'。 – SLaks 2010-07-06 15:25:34

+0

@SLaks:爲什麼?否則,它應該是'this.MutuallyExclusiveCheckBoxHandler'也不起作用。 – 2010-07-06 15:27:36

+0

在處理程序中,「this」將是DOM元素。 – SLaks 2010-07-06 15:29:21

0

你需要補充的是與你的參數調用處理程序的匿名函數,像這樣:

this.RegisterMutuallyExclusiveCheckBox = function(clientId) { 
    var self = this; 

    var checkBox = $j('input:checkbox#' + clientId); 

    $j(checkBox).click(function() { 
     self.MutuallyExclusiveCheckBoxHandler(parameters); 
    }); 

    this.CheckBoxes.push(checkBox); // Append to array 
}; 

事件內幕處理程序,this引用觸發事件的元素。
因此我使用單獨的self變量。

相關問題