в jQuery $(документ).ready () срабатывает дважды
Итак, я просеивал по сети, пытаясь выяснить, что здесь происходит, и я не смог получить конкретный ответ.
у меня есть один $(документ).готов на моем сайте, что швы для запуска несколько раз, независимо от кода, который находится внутри него.
Я прочитал на отчетах об ошибках для jQuery о том, как.готовое событие будет срабатывать дважды, если у вас есть исключение, которое происходит в вашем заявлении. Однако даже когда у меня есть следующий код он все еще работает дважды:
$(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, но как вы можете видеть, я только вызов функции.JS файл один раз (где этот.готовая функция есть)
12 ответов:
событие ready не может сработать дважды. Более чем вероятно, что у вас есть код, который перемещает или управляет элементом, содержащимся в коде, который заставляет браузер повторно выполнять блок сценария.
этого можно избежать, включив в теги script в
<head>
или перед закрывающим тегом</body>
и тег не используя$('body').wrapInner();
. используя$('body').html($('body').html().replace(...));
имеет тот же эффект.
Это случилось со мной при использовании KendoUI... вызов всплывающего окна вызовет
document.ready
событие для запуска несколько раз. Простое решение-установить глобальный флаг так, чтобы он запускался только один раз:var pageInitialized = false; $(function() { if(pageInitialized) return; pageInitialized = true; // Put your init logic here. });
это своего рода Хак-иш, но он работает.
попробуйте поместить это в свои функции.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 }
однако я предлагаю вам посмотреть больше в него, чтобы увидеть, где вы звоните во второй раз.
У меня была аналогичная проблема, когда я пытался обновить частичное. Я назвал возвращение ActionResult вместо возвращения PartialViewResult. В ActionResult вызвало мой готов (), чтобы запустить два раза.
существует возможность столкнуться с этой проблемой, когда вы добавляете один и тот же контроллер дважды в html.
Например::
[js]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>
у меня была подобная проблема сегодня. А
<button type="submit">
причинил$(document).ready(...)
событие для повторного запуска в моем случае. Изменение кода<button type="button">
решил проблему для меня.посмотреть документ.готовая функция вызывается снова после отправки? здесь на stackoverflow для более подробной информации.
в моем случае $(документ).готов был стрелять дважды из-за плохого CSS, проверьте, есть ли какая-либо часть вашего CSS
background-image: url('');
Если iframe не показывают ничего и используется по другим причинам (например, загрузка файла без перезагрузки), вы можете сделать что-то вроде этого :
<iframe id="upload_target" name="upload_target" style="width:0;height:0;border:0px solid #fff;"></iframe>
обратите внимание, что src не включен, что предотвращает второй триггер on ready в документе.