Document.Ready () не работает после PostBack - PullRequest
31 голосов
/ 06 марта 2012

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

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

Ответы [ 8 ]

44 голосов
/ 06 марта 2012

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

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

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

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

27 голосов
/ 06 марта 2012

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

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

15 голосов
/ 11 мая 2012

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

Sys.Application.add_load(function() {

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

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

10 голосов
/ 06 марта 2012

Лучший способ

<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, чем вам нужно снова зарегистрировать клиентский скрипт с помощью

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 
}
3 голосов
/ 02 июня 2016

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

<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>
1 голос
/ 30 августа 2016

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

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

    function pageLoad() {

        $(".alteraSoVirgula").keyup(function () {
            code here
        })
    }
0 голосов
/ 07 июля 2016

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

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

0 голосов
/ 09 ноября 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...