Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery将参数传递到JavaScript对象事件_Javascript_Jquery_Events_Checkbox - Fatal编程技术网

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

使用jQuery将参数传递到JavaScript对象事件,javascript,jquery,events,checkbox,Javascript,Jquery,Events,Checkbox,我知道有很多类似的问题,但我都试过了,都没有用…所以谢谢你的帮助 我想做什么: 我想在注册时将一对多参数传递到每个复选框“单击”事件中(见下文) 什么有效: 我可以注册没有任何参数的事件,单击事件会引发…但是我需要传入对包含JavaScript网格对象的引用(出于其他原因) 什么失败了 我尝试过各种形式的“this.MutuallyExclusiveCheckBoxHandler=function(grid){}”,但都没有用 一个想法: 我“认为”咖喱可能是答案,但我还不太知道如何做得足够好

我知道有很多类似的问题,但我都试过了,都没有用…所以谢谢你的帮助

我想做什么: 我想在注册时将一对多参数传递到每个复选框“单击”事件中(见下文)

什么有效: 我可以注册没有任何参数的事件,单击事件会引发…但是我需要传入对包含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>

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

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
};
在事件处理程序中,
引用触发事件的元素。
因此,我使用了一个单独的
self
变量。

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

(您不需要将
复选框
传递给jQuery,它已经是一个jQuery对象)

并将您的方法更改为:

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

(您可以通过
event.data
访问事件数据)

@SLaks:为什么?否则,
this.MutuallyExclusiveCheckBoxHandler
也不起作用。在处理程序中,
this
将是DOM元素。@SLaks:我认为在处理程序中,
this
应该引用DOM元素,否则,
$j(this).is(“:checked”)
没有意义。Felix是正确的:在处理程序中,“this”确实引用了(checkbox)元素。因此,“已检查”逻辑正在工作。至于even.data解决方案,它就像一个冠军。谢谢
 this.MutuallyExclusiveCheckBoxHandler = function(event) {
      var mygrid = event.data.grid;
      //...
 }