У меня есть динамический элемент HTML, и я хочу привязать функцию к обработчику событий.
drilldownTextInput = $("<input type='text' class='drilldown-search' data-drilldown-options='" + drilldownOptions + "' />");
drilldownTextInput.on('click', showOptions());
function showOptions() {
console.log("Working.");
}
Проблема в том, что при загрузке showOptions()
функция showOptions()
вызывается сразу, а не на событии клика.
Если я это сделаю, событие будет работать так, как ожидалось, - только по щелчку.
drilldownTextInput = $("<input type='text' class='drilldown-search' data-drilldown-options='" + drilldownOptions + "' />");
drilldownTextInput.on('click', function() {
console.log("Only appears on click...");
});
В чем разница между ними и как я могу вызвать функцию, чтобы держать вещи СУХОЙ?
Попробуйте следующее:
drilldownTextInput.on('click', showOptions);
вместо:
drilldownTextInput.on('click', showOptions());
()
вызывает функцию, вы должны просто передать функцию без ее выполнения, иначе возвращаемое значение функции будет установлено как обработчик.
drilldownTextInput.on('click', showOptions);
foo(bar())
, то сначала вызываетсяbar
, а ее возвращаемое значение передается вfoo
. Все аргументы оцениваются первыми.