当前位置: 代码迷 >> JavaScript >> 使用jQuery将参数传递到JavaScript对象事件中
  详细解决方案

使用jQuery将参数传递到JavaScript对象事件中

热度:74   发布时间:2023-06-06 09:41:49.0

我知道有很多与此类似的问题,但是我已经尝试了全部,但无济于事...因此,感谢您的任何帮助。

我想做的是我想在注册时将一对多参数传递给每个复选框的“单击”事件(请参见下文)。

起作用:我可以在不使用任何参数的情况下注册事件,并且引发click事件……但是我需要传递对包含JavaScript网格对象的引用(出于其他原因)。

失败我尝试了各种形式的“ this.MutuallyExclusiveCheckBoxHandler = function(grid){}”都无济于事。

一个想法:我“认为”可能是解决问题的办法,但是我还不知道如何做到足够好(到目前为止)。

该区域实例化网格并注册复选框

<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>

使用并传递事件数据(假设您的网格是当前对象):

// 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访问事件数据)

您需要添加一个匿名函数来使用您的参数调用处理程序,如下所示:

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变量。

  相关解决方案