Я хочу изменить поведение раскрывающегося списка Bootstrap на основе глобальной переменной состояния. Если переменная uiState
равна 'normal'
при нажатии, она должна отображать раскрывающийся список, но если она находится в другом состоянии, она должна делать что-то еще. У меня есть следующий код:
$(document).ready(function () {
var uiState = 'normal';
// Load HTML for word control from server
var wordUiElement;
$.get('/static/word_ui_element.html', function (data) {
wordUiElement = data;
});
var nwords = 0;
var testClickCounter = 0;
// Make it so dropdowns are exclusively controlled via JavaScript
$(document).off('.dropdown.data-api')
$('#ui-add-word').click(function (event) {
var control = wordUiElement.replace(/wx/g, 'w' + nwords.toString());
$('#ui-spec').append(control);
nwords++;
});
$('#ui-change-state').click(function (event) {
if (uiState === 'word_select') {
uiState = 'normal';
} else {
uiState = 'word_select';
}
console.log(uiState);
});
$('#ui-spec').on('click', '.dropdown .dropdown-toggle', function (event) {
if (uiState === 'normal') {
$(this).dropdown('toggle');
}
else {
testClickCounter ++;
console.log(testClickCounter);
}
});
});
Однако, когда раскрывающиеся списки создаются динамически, их поведение кажется фиксированным в зависимости от того, какой была переменная uiState
при создании раскрывающегося списка.
Это означает, что если раскрывающийся список был создан, когда для переменной uiState
было установлено значение 'normal'
, независимо от того, что такое uiState
при нажатии, он всегда будет показывать или скрывать раскрывающийся список. С другой стороны, если раскрывающийся список был создан, когда uiState
было 'word_select'
, он всегда будет увеличиваться и регистрировать testClickCounter
. Как будто оператор if в обработчике оценивается один раз при создании раскрывающегося списка и сохраняет значение uiState
, которое было при его создании.
Я предполагаю, что это проблема области действия, и обработчик событий выполняется при его создании. Я хочу, чтобы во время клика он проверял значение uiState
, но я не знаю, как это исправить.