jQuery: функция События не взятие переменной?

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

    // 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 неизвестно в функции события. как я могу зафиксировать это?

1
задан gsquare567 25 June 2010 в 15:36
поделиться

2 ответа

Ну, вы не потрудились предоставить нам контекст, но есть вероятность, что вы изменяете значение 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
ответ дан 2 September 2019 в 23:30
поделиться

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

$('#companyVar' + companyVarID + 'Enabled').change(function() {
    $('#' + this.id.replace('Enabled', 'Unimportant')).fadeIn("slow");
});
$('#companyVar' + companyVarID + 'Disabled').change(function() {
    $('#' + this.id.replace('Disabled', 'Unimportant')).slideUp("slow");
});
1
ответ дан 2 September 2019 в 23:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: