UpdatePanel полностью заменяет содержимое панели обновления при обновлении. Это означает, что те события, на которые вы подписались, больше не подписываются, поскольку в этой панели обновлений есть новые элементы.
Чтобы обойти это, я переподписывался на события, которые мне нужны после каждого обновления. Я использую $(document).ready()
для начальной загрузки, затем использую Microsoft PageRequestManager
(доступно, если у вас есть панель обновлений на вашей странице), чтобы переподписывать каждое обновление.
$(document).ready(function() {
// bind your jQuery events here initially
});
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {
// re-bind your jQuery events here
});
Это PageRequestManager
объект javascript, который автоматически доступен, если на странице есть панель обновления. Вам не нужно ничего делать, кроме приведенного выше кода, чтобы использовать его, пока панель обновления находится на странице.
Если вам нужен более подробный контроль, это событие передает аргументы, аналогичные тому, как события .NET передаются аргументы, (sender, eventArgs)
так что вы можете видеть, что вызвало событие, и выполнять только повторную привязку, если это необходимо.
Вот последняя версия документации от Microsoft: msdn.microsoft.com/.../bb383810.aspx
Лучший вариант, который вы можете иметь, в зависимости от ваших потребностей, это использовать jQuery .on()
. Эти методы более эффективны, чем повторная подписка на элементы DOM при каждом обновлении. Однако, прежде чем использовать этот подход, прочитайте всю документацию, поскольку она может соответствовать или не соответствовать вашим потребностям. Существует множество плагинов jQuery, которые было бы неразумно использовать для рефакторинга .delegate()
или .on()
, поэтому в этих случаях вам лучше переподписаться.