jQuery $(문서).준비() 두 번 발사
저는 여기서 무슨 일이 일어나고 있는지 알아보기 위해 인터넷을 뒤지고 다녔지만 구체적인 답을 얻을 수 없었습니다.
하나 있어.$(document).ready그 안에 있는 코드에 상관없이 여러 번 실행될 것 같은 내 사이트에서.
저는 jQuery의 버그 보고서를 읽어 보았습니다..ready문장 내에 발생하는 예외가 있으면 이벤트가 두 번 발생합니다.그러나 다음 코드가 있는 경우에도 두 번 실행됩니다.
$(document).ready(function() {
try{
console.log('ready');
}
catch(e){
console.log(e);
}
});
콘솔에는 "ready"가 두 번 기록되어 있습니다.예외가 있는 다른 .ready가 문제를 일으킬 가능성이 있습니까?모든 .ready 태그가 서로 독립적인 것으로 알고 있었는데 어디서 작동하는지 찾을 수 없는 것 같습니다.
사이트의 헤드 블록은 다음과 같습니다.
<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 함수가 있습니다).
준비된 이벤트는 두 번 발사할 수 없습니다.발생 가능성이 높은 것은 코드가 포함된 요소를 이동하거나 조작하는 코드가 있다는 것이며, 이로 인해 브라우저는 스크립트 블록을 다시 실행하게 됩니다.
스크립트 태그를 에 포함하면 이를 방지할 수 있습니다.<head>아니면 마감 전에</body>태그 및 사용 안 함$('body').wrapInner();.사용.$('body').html($('body').html().replace(...));동일한 효과가 있습니다.
저도 그런 일이 있었는데, 합병이 잘 안 돼서 대본이 두 번이나 들어갔다는 걸 깨달았어요.
검도UI를 사용할 때 이런 일이 있었는데...팝업 창을 호출하는 것은document.ready여러 번 발사하는 이벤트입니다.간단한 해결책은 글로벌 플래그를 한 번만 실행하도록 설정하는 것입니다.
var pageInitialized = false;
$(function()
{
if(pageInitialized) return;
pageInitialized = true;
// Put your init logic here.
});
그건 좀 어색하지만, 효과는 있어요.
JS 파일을 두 번 포함하지 않도록 하십시오.그건 내 경우였습니다.
사용하는 것을 고려해 볼 수 있습니다.
window.onload
대신에
$(document).ready
두 번 실행되지 않도록 functions.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
}
하지만 저는 당신이 두번째로 어디에 전화를 하는지 알아보기 위해 그것을 더 조사하는 것을 제안합니다.
부분을 새로 고치려고 할 때도 비슷한 문제가 있었습니다.반환 부분 보기 결과 대신 반환 작업 결과를 호출했습니다.작업 결과로 인해 준비가 두 번 실행되었습니다.
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>
오늘도 비슷한 문제가 있었습니다. A.<button type="submit">원인은.$(document).ready(...)내 경우에 다시 발포하는 사건이 발생했습니다.코드를 다음으로 변경<button type="button">그 문제를 해결해 줬습니다.
see document.ready function이 submit button 후에 다시 호출되었습니까?자세한 내용은 스택 오버플로를 참조하십시오.
제 경우에는 $(문서)입니다.나쁜 CSS때문에 ready가 두번 발사되고 있었습니다. 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 트리거를 방지하는 기능은 포함되어 있지 않습니다.
window.load 기능이 두 번 실행되는 문제가 있었습니다.그 이유는 메인 페이지에 있는 동일한 javascript-file과 .net 사용자 컨트롤을 참고했기 때문입니다.메인 페이지에서 참조를 제거했을 때 로드 기능은 한 번만 실행되었습니다.
오늘 아침에 이런 일이 있었어요제가 최근에 조작한 jquery modal 형태의 html 코드를 면밀히 조사한 후 발견한 것은 제가 실수로 클로징 테이블 태그를 제거했다는 것입니다.왜 document.ready 함수가 두 번 호출되는지 아직 충분히 이해하지 못했지만, 아직 완전히 이해하지 못했습니다.마감 테이블 태그를 추가하면 이 문제가 해결되었습니다.
jQuery JavaScript Library v1.8.3(예, 레거시 앱입니다)
문제는 index.cshtml 파일과 _Layout.cshtml 파일에 JS 파일을 참조하는 태그가 있다는 것이었습니다.이로 인해 document.ready 함수가 두 번 발사되어 DataTable이 폭발하게 되었습니다.
언급URL : https://stackoverflow.com/questions/10727002/jquery-document-ready-fires-twice
'programing' 카테고리의 다른 글
| dateFilter란 무엇이며 자세한 내용은 어디에서 확인할 수 있습니까? (0) | 2023.11.06 |
|---|---|
| ASP에 개별 사용자 계정 인증 옵션이 없습니다.NET Core 웹 API 템플릿 (0) | 2023.11.06 |
| 배열의 두 번째에서 마지막 항목을 얻습니까? (0) | 2023.11.06 |
| Oracle이 Docker에서 작동하는지 확인하려면 어떻게 해야 합니까? (0) | 2023.11.06 |
| 이 오류는 무엇을 의미합니까? 'somefile.c:200: error: 1032바이트의 프레임 크기가 1024바이트보다 큽니다.' (0) | 2023.11.06 |