2012-03-06 2 views
27

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

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

+1

Это может быть несколько вещей. Есть ли какой-нибудь код для обмена? –

+0

Xyan прав, я обнаружил, что другой разработчик добавил предложение, которое проверяло URL-адрес, но обложка на URL-адресе игнорировалась, мой код не был достигнут. Я рекомендую добавлять оповещения в свой JS, чтобы гарантировать, что он не будет вызван и не будет работать оттуда. – Adam

ответ

41

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

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

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

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

+2

Должен быть 'Sys.WebForms.PageRequestManager.getInstance(). Add_endRequest (doSomething);' – ShankarSangoli

+0

Является ли «Sys.WebForms.PageRequestManager» C# или javascript? – Theomax

+1

Это Javascript - это рутина библиотек Microsoft Ajax JS, которые загружаются –

8

Bestest способ является функцией

<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 
} 
+0

Вы имеете в виду, что зарегистрировать javascript я хочу снова узнать? – Theomax

+0

@aspdotnetuser - да, что или как предложено в нижнем ответе, вы можете сделать это легко –

+0

Что вы подразумеваете под re-bind? – Theomax

22

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

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

+0

Функция pageLoad() ничего не делает. – Theomax

+0

и у вас есть '' на странице? – tedski

+3

http://encosia.com/document-ready-and-pageload-are-not-the-same/ – tedski

14

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

Sys.Application.add_load(function() { 

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

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

+0

Это не работает. – dcreight

+0

Привет dcreight, на странице добавьте следующие строки: '<осины: ScriptManager ID = RUNAT = "сервер" "ScriptManager1"> <жерех: ScriptReference Path = "~/путь/к/file.js"/> ' Тогда во внешнем файле (file.js), выполните следующие действия: ' Sys.Application.add_load (функция() {// вставить код здесь, чтобы сделать на каждом постбэка }); ' Проблема с использованием подхода' function pageLoad() {} 'заключается в том, что вы можете иметь только одну из них на странице, а мой подход выше, вы можете добавить столько функций add_load, сколько захотите. Если у вас все еще есть проблемы, отправьте код ошибки или код ошибки. – pharophy

+0

У меня это работает, но спасибо за ответ :) – dcreight

-2

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

3

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

<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> 
0

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

1

Этот код ниже работает хорошо, чтобы решить эту проблему. Как указано в ссылке, размещенной ранее (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 
     }) 
    } 
+0

Ваш ответ затрагивает некоторые из тех же идей, что и другие ответы, которые были представлены (и принятый ответ), но в нем содержится много лишнего пуха, характерного для того места, где вы первоначально написали этот код. Чтобы получить больше положительных отзывов о вашем ответе, я бы предложил удалить все, что не относится к заданному вопросу, и добавить объяснение относительно _why_, решение устраняет проблему. –

+0

Теперь приятно? –

+0

Да, очень хорошая работа. –

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