2010-04-19 2 views
0

Это немного длинный снимок, так как у меня нет доступа к коду на данный момент. Однако в коде нет ничего особенного. Я использую комбинацию JqueryUI и ASP.NET UpdatePanels. Если я нажму на какой-либо элемент управления trigger (кнопка asp.net), частичные обратные передачи будут точными. Однако, если я нажму на элемент управления trigger после нажатия на кнопку JQueryUI, тогда весь макет испортится, и большая часть контента движется вверх. Я могу просто нажать кнопку JQueryUI, и когда я нажму на нее, макет вернется в нормальное состояние, и все будет нормально, пока я снова не нажму кнопку триггера. Эта страница отлично работает во всех последних браузерах, но эта проблема возникает в IE 7.Обновление обновленной панели jqueryUI в IE7

Надеюсь, что кто-то столкнулся с аналогичной проблемой в IE 7 и нашел обходное решение/решение. Я пытался исправить это на пару дней, но не повезло.

Спасибо за любой совет.

+0

У вас есть URL-адрес для этого, поэтому я могу проверить его? – XGreen

+0

извините, это еще не на серийном сервере. –

ответ

0

Когда UpdatePanel обновляется, он уничтожает объекты DOM внутри своих границ и заменяет его новыми объектами (даже если это содержимое может быть одинаковой или аналогичной разметки). Любой JavaScript, который был прикреплен к старым элементам DOM, теперь содержит ссылки на несуществующие объекты. Если код jQuery обрабатывает это изящно, все просто перестает работать; или хуже (как вы видите) непредсказуемое и неустойчивое поведение.

Решение, которое я нашел, - это получить событие beginRequest UpdatePanel и вызвать destroy() для всех объектов jQueryUI; и на событии endRequest воссоздают их, перезапуская все селекторы и воссоздавая объекты jQueryUI.

<script type="text/javascript"> 

    function createJQueryObjects() { 
     //setup 
    } 

    function destroyJQueryObjects() { 
     //destroy 
    } 
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(destroyJQueryObjects); 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(createJQueryObjects); 
</script> 
+0

Теперь я вижу, почему разработчики ненавидят IE со страстью: D. Спасибо Рексу, я попробую это завтра и дам вам знать, если это сработает. –

+0

Спасибо Рексу, мне удалось решить проблему. Это оказалось комбинацией нескольких вещей, но мне пришлось уничтожить, а затем воссоздать, как вы сказали, иначе jquery перестанет работать после обратной передачи. –

Смежные вопросы