jQuery: функция события не принимает переменную? - PullRequest
1 голос
/ 25 июня 2010

Если выбрана радиокнопка, я хочу, чтобы div отображал или скрывал.Вот код:

    // add event to hide unimportant details when var is disabled and show when enabled
    $('#companyVar' + companyVarID + 'Enabled').change(function() {
        $('#companyVar' + companyVarID + 'Unimportant').fadeIn("slow");
    });
    $('#companyVar' + companyVarID + 'Disabled').change(function() {
        $('#companyVar' + companyVarID + 'Unimportant').slideUp("slow");
    });

он должен работать (я предупредил, что событие действительно выполняется), но я думаю, что по какой-то причине переменная companyVarID неизвестна внутри функции события.как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 25 июня 2010

Ну, вы не удосужились дать нам какой-либо контекст, но есть вероятность, что вы изменяете значение companyVarID после настройки этих обработчиков событий ...

Каким-то образом вам нужно сохранитьэто значение (а не просто ссылка на переменную, которая адекватно фиксируется замыканием).

Решение Ника подойдет , и довольно чисто, но вот альтернативный метод, просто чтобы дать вам представление о том, что происходит ...

// ...something assigns a value to companyVarID

// put event-handler wireup in an anonymous function (to be called immediately)
// mask the outer variable with a parameter that can't be changed externally
(function(companyVarID) 
{
  // add event to hide unimportant details when var is disabled and show when enabled
  $('#companyVar' + companyVarID + 'Enabled').change(function() {
    $('#companyVar' + companyVarID + 'Unimportant').fadeIn("slow");
  });
  $('#companyVar' + companyVarID + 'Disabled').change(function() {
    $('#companyVar' + companyVarID + 'Unimportant').slideUp("slow");
  });

 // pass the value of the outer variable to our anonymous function, allowing 
 // it to be captured in the event-handler closures
})(companyVarID);

// ...something changes the value of companyVarID
1 голос
/ 25 июня 2010

Вы можете немного изменить его, чтобы он основывался на идентификаторе текущего элемента, например:

$('#companyVar' + companyVarID + 'Enabled').change(function() {
    $('#' + this.id.replace('Enabled', 'Unimportant')).fadeIn("slow");
});
$('#companyVar' + companyVarID + 'Disabled').change(function() {
    $('#' + this.id.replace('Disabled', 'Unimportant')).slideUp("slow");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...