Подтвердить что ты не робот

Как запустить javascript после обновления панели обновления?

У меня есть функция pageLoad, которая устанавливает некоторый css в элементе управления .ascx, который я не могу изменить. При загрузке страницы все нормально, но когда панель обновления обновляет элемент управления, мой css больше не применяется. Как перезапустить мою функцию после обновления страницы?

 $(function() {
        $("textarea").attr("cols", "30");
        $("input.tbMarker").css({ "width": "100px" }).attr("cols","25");
    });

Это, очевидно, работает только при загрузке начальной страницы. Как запустить его после обновления?

4b9b3361

Ответ 1

Добавление обработчика add_pageLoaded также может работать.

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);

Примечание: обработчик будет срабатывать для любого обратного вызова, но вы можете использовать sender._postBackSettings.panelID для фильтрации, когда вы хотите, чтобы ваша функция вызывалась.

Больше образцов:

Ответ 2

Самый простой способ - использовать MSAjax pageLoad Event в вашем javascript-коде:

<script> 
   ///<summary>
   ///  This will fire on initial page load, 
   ///  and all subsequent partial page updates made 
   ///  by any update panel on the page
   ///</summary>
   function pageLoad(){ alert('page loaded!') }  
</script>

Я использовал его много раз, он работает как шарм. Самое главное - не путать его с функцией document.ready(которая будет выполняться только один раз после того, как страница Document Object Model (DOM) готова для выполнения кода JavaScript), но событие pageLoad будет выполняться каждый раз, когда панель обновления освежает.

Источник: Запуск script после панели обновления AJAX asp.net

Ответ 3

Во время обратной передачи для панели обновления в коде сервера используйте ClientScriptManager, чтобы добавить на страницу несколько новых script, что-то вроде этого:

ClientScriptManager.RegisterStartupScript(
       typeof(page1), 
       "CssFix", 
       "javascriptFunctionName()", 
        true);

Инкапсулируйте свой javascript в именованной функции, которая соответствует третьему аргументу, и она должна выполняться, когда возвращается обратная передача.

Ответ 4

Добавьте код в том же виде, что и ваш менеджер Script.

Код за:

protected void Page_Load(object sender, EventArgs e)
{
    if (ScriptManager1.IsInAsyncPostBack)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("<script language='javascript' type='text/javascript'>");
        sb.Append("Sys.Application.add_load(func);");
        sb.Append("function func() {");
        sb.Append("Sys.Application.remove_load(func);");
        sb.Append("alert('I am Batman!');");
        sb.Append("}");
        sb.Append("</script>");
        ScriptManager.RegisterStartupScript(this, GetType(), "script", sb.ToString(), false);
    }
}

Ответ 5

Вы также можете привязывать событие к коду на стороне клиента (JavaScript) каждый раз, когда UpdatePanel завершается следующим образом:

        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();});

Итак, в этом случае myFunction(); будет вызываться каждый раз, когда произошла обратная передача UpdatePanel. Если вы выполняете этот код при загрузке страницы, функция будет вызываться в правильное время.