programing

jQuery $(문서).준비() 두 번 발사

jooyons 2023. 11. 6. 21:48
반응형

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&amp;c=29258&amp;s4='+s4+'&amp;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

반응형