Это не работает, потому что вы пытаетесь присоединить слушатель события к элементу, который еще не существует в DOM, во время вызова функции jQuery.
Пошаговое объяснение:
В главном представлении при оценке тега скрипта вызывается функция $('#btnCancel')
, которая не находит элемент #btnCancel на странице - потому что он еще не существует. Этот элемент добавляется на страницу только после асинхронной выборки при вызове AddCustomer()
.
Итак, функция $
возвращает пустой список []
.
Поскольку jQuery ничего не находит, функция .click()
, которая вызывается впоследствии, работает с пустым списком и не присоединяет ваш прослушиватель событий.
Почему это работает, когда вы перемещаете код в частичное:
Когда вы перемещаете вызов функции $('#btnCancel')
в частичное представление, порядок вызовов функций изменяется. Сначала необходимо выполнить асинхронную выборку части, затем добавить ответ в DOM, затем вычисляется тег сценария и, наконец, вызывается функция $('#btnCancel')
, которая, в свою очередь, находит элемент #btnCancel в DOM и передает результат в .click()
функция, которая присоединяет ваш слушатель событий.
Возможное решение:
Можно отложить создание новых прослушивателей событий до тех пор, пока асинхронно извлеченные элементы не будут добавлены в DOM.
Для этого вы можете изменить функцию AddCustomer
.
На главном экране:
function AddCustomer() {
$.get("DataEntryScreen").done(function (r) {
$('#DivDatEntry').html(r).find('#btnCancel').click(function (e) {
alert();
$('#DivDatEntry').html("");
});
});
}