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

Document.Ready() не работает после PostBack

У меня есть страница, содержащая пользовательский элемент управления на панели обновления. $(document).ready(function() ) { вызывается и корректно выполняет код при загрузке страницы, но если пользователь нажимает кнопку (внутри пользовательского элемента управления), document.ready() не вызывается (document.load, onload также не работа)

Я исследовал это в сети и нашел похожие проблемы, но ничего не могу объяснить, почему это не работает. Какие еще причины могут быть для document.ready не работать?

4b9b3361

Ответ 1

Это будет проблема с частичной обратной передачей. DOM не перезагружается, и поэтому функция готовности документа больше не будет удалена. Вам нужно назначить частичный обработчик обратной обработки в JavaScript, например...

function doSomething() {
   //whatever you want to do on partial postback
}

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(doSomething);

Вышеприведенный вызов add_endRequest должен быть помещен в JavaScript, который выполняется при первой загрузке страницы.

Ответ 2

Вместо $(document).ready вы можете использовать function pageLoad(){}.

Он автоматически вызывается ScriptManager на странице, даже при обратной передаче.

Ответ 3

Я столкнулся с этим некоторое время назад, как сказал Эль Ронноко, он должен идти с DOM, который не перезагружается. Однако вы можете просто изменить $(document).ready(function() { к

Sys.Application.add_load(function() {

Это заставит его работать при каждой обратной передаче.

Вы также можете использовать функцию pageLoad(), но у вас может быть только одна функция pageLoad, тогда как с Sys.Application.add_load вы можете добавить столько обработчиков, сколько пожелаете.

Ответ 4

Самый лучший способ -

<asp:UpdatePanel...
<ContentTemplate
     <script type="text/javascript">
                    Sys.Application.add_load(LoadScript);
     </script>
 you hemla code gose here 
</ContentTemplate>
    </asp:UpdatePanel>

Функция Javascript

<script type="text/javascript">

        function LoadScript() {
            $(document).ready(function() {

                   //you code gose here 
                                    });
         }
</script>

или

С его помощью UpdatePanel вам нужно снова зарегистрировать клиент script, используя

ScriptManager.RegisterClientScript

или

$(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
    loadscript();

});


$(document).ready(loadscript);

function loadscript()
{
  //yourcode 
}

Ответ 5

Это пример, который работал у меня в прошлом:

<script>
function MyFunction(){ 
    $("#id").text("TESTING");
}
//Calling MyFunction when document is ready (Page loaded first time)
$(document).ready(MyFunction); 

//Calling MyFunction when the page is doing postback (asp.net)
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(MyFunction);
</script>

Ответ 6

Этот код ниже подходит для решения этой проблемы. Как указано в ранее опубликованной ссылке (http://encosia.com/document-ready-and-pageload-are-not-the-same/), когда у вас есть asp.NET с updatePanels, вы должны использовать функцию pageLoad(). Если у вас есть только одна страница, и в каждой обратной почте она будет полностью перезагружена, то $(document).ready() будет правильным вариантом.

Пример использования pageLoad:

    function pageLoad() {

        $(".alteraSoVirgula").keyup(function () {
            code here
        })
    }

Ответ 7

У меня также была проблема с той же проблемой, но я обнаружил, что обработчик события jQuery $(document).ready работает, когда загружается страница, но после того, как ASP.Net AJAX UpdatePanel Partial PostBack не вызван. поэтому используйте Sys.Application.add_load (function() {}); вместо $(document).ready. Это отлично работает для меня:)

<script>
Sys.Application.add_load(function() { //Your code }); </script>

Ответ 8

В большинстве случаев это происходит из-за Updatepanle. Просто поставьте триггеры обратной передачи на кнопку, и это решит это.