Передача параметров в события объекта JavaScript с использованием jQuery - PullRequest
0 голосов
/ 06 июля 2010

Я знаю, что есть много подобных вопросов, но я попробовал их все безрезультатно ... так что спасибо за любую помощь.

ЧТО Я ПЫТАЮСЯ ДЕЛАТЬ: Я хочу передать параметры «один ко многим» в каждое событие «щелкнуть» флажков при регистрации (см. Ниже).

ЧТО РАБОТАЕТ: Я могу зарегистрировать событие БЕЗ любых параметров, и событие click возникает ... но мне нужно передать ссылку на содержащий объект сетки JavaScript (по другим причинам).

ЧТО НЕ ПОЛУЧАЕТСЯ Я пробовал различные формыof 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>

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Используйте .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 голосов
/ 06 июля 2010

Вам необходимо добавить анонимную функцию, которая вызывает ваш обработчик с вашими параметрами, например:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...