Document.Ready() не работает после PostBack
У меня есть страница, содержащая пользовательский элемент управления на панели обновления. $(document).ready(function() ) {
вызывается и корректно выполняет код при загрузке страницы, но если пользователь нажимает кнопку (внутри пользовательского элемента управления), document.ready()
не вызывается (document.load
, onload
также не работа)
Я исследовал это в сети и нашел похожие проблемы, но ничего не могу объяснить, почему это не работает. Какие еще причины могут быть для document.ready
не работать?
Ответы
Ответ 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.
Просто поставьте триггеры обратной передачи на кнопку, и это решит это.