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
Лучшим вариантом, в зависимости от ваших потребностей, является использование .on()
в jQuery. Эти методы более эффективны, чем повторная подписка на элементы DOM при каждом обновлении. Однако, прежде чем использовать этот подход, прочитайте всю документацию, поскольку она может соответствовать или не соответствовать вашим потребностям. Существует множество плагинов jQuery, которые было бы нецелесообразно использовать для рефакторинга .delegate()
или .on()
, поэтому в этих случаях вам лучше переподписаться.