JQuery $(document).ready() срабатывает дважды
Итак, я просеивал по сети, пытаясь узнать, что происходит здесь, и я не смог получить конкретный ответ.
У меня есть один $(документ). Уже на моем сайте швы запускаются несколько раз, независимо от кода, который внутри него.
Я прочитал сообщения об ошибках для jQuery о том, как событие .ready будет срабатывать дважды, если у вас есть исключение, которое встречается в вашем заявлении. Однако даже когда у меня есть следующий код, он все еще работает дважды:
$(document).ready(function() {
try{
console.log('ready');
}
catch(e){
console.log(e);
}
});
В консоли все, что я вижу, "готово" записывается дважды. Возможно ли, что другой. Уже с исключением в этом вызовет проблему? Я понял, что все теги уже были независимы друг от друга, но я не могу найти, где это вступает в игру?
Вот главный блок для сайта:
<head>
<title>${path.title}</title>
<meta name="Description" content="${path.description}" />
<link href="${cssHost}${path.pathCss}" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="media/js/fancybox/jquery.fancybox.pack.js" type="text/javascript" ><!-- --></script>
<script src="/media/es/jobsite/js/landing.js" type="text/javascript" ><!-- --></script>
<script src="/media/es/jobsite/js/functions.js" type="text/javascript"><!-- --> </script>
<script src="/media/es/jobsite/js/jobParsing.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="/media/es/jobsite/js/queryNormilization.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery/jquery.metadata.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery/jquery.form.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.7/jquery.validate.min.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery.i18n.properties-min.js" type="text/javascript" charset="utf-8"><!----></script>
<script type="text/javascript" charset="utf-8">
function updateBannerLink() {
var s4 = location.hash.substring(1);
$("#banner").attr('href','http://INTELATRACKING.ORG/?a=12240&c=29258&s4='+s4+'&s5=^');
}
</script>
</head>
Не обращайте внимания на переменные JSP, но, как вы можете видеть, я только вызываю файл functions.js один раз (где существует функция .ready)
Ответы
Ответ 1
Событие готовности не может срабатывать дважды. Скорее всего, у вас есть код, который перемещает или управляет элементом, содержащим код, в котором заставляет браузер повторно выполнять блок script.
Этого можно избежать, включив теги script в <head>
или перед закрывающим тегом </body>
и не, используя $('body').wrapInner();
. использование $('body').html($('body').html().replace(...));
имеет тот же эффект.
Ответ 2
Это случилось и со мной, но я понял, что script был включен дважды из-за плохого слияния.
Ответ 3
Это случилось со мной при использовании KendoUI... при вызове всплывающего окна событие document.ready
срабатывало несколько раз. Простое решение - установить глобальный флаг, чтобы он выполнялся только один раз:
var pageInitialized = false;
$(function()
{
if(pageInitialized) return;
pageInitialized = true;
// Put your init logic here.
});
Это своего рода хак-иш, но он работает.
Ответ 4
Убедитесь, что вы не включаете JS файл дважды. Это было мое дело
Ответ 5
Вы можете использовать
window.onload
вместо
$(document).ready
Ответ 6
попробуйте поместить это в свои функции. js, чтобы он не выполнялся дважды:
var checkit = window.check_var;
if(checkit === undefined){ //file never entered. the global var was not set.
window.check_var = 1;
}
else {
//your functions.js content
}
однако я предлагаю вам посмотреть в него больше, чтобы увидеть, куда вы звоните во второй раз.
Ответ 7
У меня была аналогичная проблема, когда я пытался обновить частичное. Я обратился к возврату ActionResult вместо возвращаемого PartialViewResult. ActionResult заставил мой ready() работать дважды.
Ответ 8
Есть возможность столкнуться с этой проблемой, когда вы добавляете один и тот же контроллер дважды в html.
Для примера:
[УД]
app.controller('AppCtrl', function ($scope) {
$(document).ready(function () {
alert("Hello");
//this will call twice
});
});
[HTML]
//controller mentioned for the first time
<md-content ng-controller="AppCtrl">
//some thing
</md-content>
//same controller mentioned again
<md-content ng-controller="AppCtrl">
//some thing
</md-content>
Ответ 9
В моем случае $(document).ready дважды стрелял из-за плохого CSS, проверьте, имеет ли какая-либо часть вашего CSS background-image: url('');
Ответ 10
Если iframe ничего не показывает и используется по другим причинам (например, при загрузке файла без перезагрузки), вы можете сделать что-то вроде этого:
<iframe id="upload_target" name="upload_target" style="width:0;height:0;border:0px solid #fff;"></iframe>
Обратите внимание, что src не включен, что предотвращает второе нажатие на готовый триггер в документе.
Ответ 11
У меня возникла такая проблема, когда функция window.load выполнялась дважды:
Причина была в том, что я ссылался на один и тот же файл javascript на главной странице, а также на пользовательский контроль .net. Когда я удалил ссылку на главной странице, функция load выполнялась только один раз.