Поток, который вы видите, выглядит примерно так:
- Нажмите на кнопку
- AnimationExtender ловит действие и вызывает clickOn callback
- linkPostback запускает асинхронный запрос на страницу, а затем возвращает поток в AnimationExtender
- Анимация начинается
- pageRequest возвращает и вызывает playAnimation, которая снова запускает анимацию
Я думаю, что есть как минимум два пути решения этой проблемы. Кажется, у вас есть почти весь необходимый вам javascript, вам просто нужно обойти AnimationExtender, запуская анимацию одним кликом.
Вариант 1. Скройте кнопку AnimationExtender и добавьте собственную кнопку, которая воспроизводит анимацию. Это должно быть так же просто, как установить стиль кнопки AE на «display: none;» и наличие собственной кнопки вызова linkPostback ().
Вариант 2. Повторно отключите расширитель анимации после завершения анимации. Это должно работать, пока вызов playAnimation блокируется, что, вероятно, таково:
function linkPostback() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(playAnimation)
}
function playAnimation() {
AnimationExtender.Enabled = true;
var onclkBehavior = $find("ctl00_btnOpenList").get_OnClickBehavior().get_animation();
onclkBehavior.play();
AnimationExtender.Enabled = false;
}
Кроме того, кажется, что ваш общий подход может столкнуться с проблемами, если есть задержка в получении запроса страницы. Может быть немного странно нажимать кнопку, и через несколько секунд анимация происходит. Может быть, лучше либо предварительно загрузить данные, либо предварительно заполнить div чем-то вроде «Загрузка ...», выбрать нужный размер, а затем заполнить фактическое содержимое, когда оно прибудет.