별도의 js 파일에 작성하고, 로딩 문제를 방지하기 위해 window.onload=function(){}을 사용했습니다.
1. 본문에서 직접 코드를 삽입하면 작동합니다.
2. 사용할 수 없습니다. 파일에서 window.onload=function(){}을 삭제하면 사용할 수 있습니다.
3. 코드에 직접 삽입하든지 파일에 삽입하든 사용할 수 없습니다.
4. 콘솔은 오류를 보고하지 않으며 디버깅할 수 있습니다. 브라우저에서 이 js 파일을 찾으세요.
페이지 로딩에 문제가 있는 것 같습니다. 구체적인 문제가 무엇인지 알 수 없습니다. . .
코드 게시
js 코드는 이렇습니다
으아아아
먼저 제안하고 싶은 점은 파일 이름 지정에 한자를 포함하지 않는 것이 가장 좋으며 일반적으로 숫자로 시작하지 않는 것이 좋습니다.
문제 정보:
콘솔에 오류가 보고되지 않으며 디버거에서 js 파일을 찾을 수 있습니다.
:window.onload=function(){}을 사용하는 한 code>, js code 헤드에 넣어도, 본문에 넣어도, 파일 형태로 넣어도 안에 있는 코드는 반드시 실행됩니다.
控制台没报错且能在调试器中找到这个js文件
:只要你使用了window.onload=function(){}
,js代码是肯定执行的,不论你是放在head里面还是body里面,也不论你是不是以文件的形式引入的,里面的代码都会执行。从body里插入js文件,不能用;文件中删掉window.onload=function(){},能用
:html中的onclick="showPic(this)"
,这个showPic函数是定义在全局作用域下面的,不能用window.onload包裹,当你包裹的时候,showPic的作用域就处于onload这个函数里面了,在全局作用域下找不到showPic,所以点击时,showPic函数里面的代码没有执行
,其他的js代码是执行的,你看看a标签里面已经添加上了onclick等代码。写在head里,无论直接插入代码还是文件,都不能用
본문에서 js 파일을 삽입하지만 사용할 수 없습니다. 파일에서 window.onload=function(){}을 삭제하면 사용할 수 있습니다.
:onclick="showPic(this )"에서 이 showPic 함수는 전역 범위에 정의되어 있으며 window.onload로 래핑할 수 없습니다. 래핑하면 showPic의 범위가 onload 함수 내부에 있습니다. 전역 범위에서는 ShowPic을 찾을 수 없습니다. . 이므로 클릭하면 showPic
@张东东 정답은 맞지만, element.onclick 바인딩 이벤트 방식(댓글 달아주신 코드)을 사용하셨는데요, 이때 showPic 함수를 스코프 체인에서 찾을 수 있어서 실행이 가능합니다. 🎜 🎜@stephenhuang 온로드에 작성된 showPic 코드를 실행할 수 있나요? 🎜
함수 안의 코드는 실행되지 않지만
다른 js 코드는 a 태그에 추가된 것을 볼 수 있습니다.는 헤드에 작성되어 코드에 직접 삽입하든 파일에 직접 삽입하든 사용할 수 없습니다.
: dom 쿼리의 경우 현재 dom 트리가 구축되지 않았으므로 a 태그를 사용할 수 없습니다. 질문했다. 헤드에 작성한 DOM 쿼리 js 코드는 window.onload로 래핑해야 하는데, showPic 함수를 추출해서 글로벌 스코프에 넣어야 정상적으로 실행될 수 있습니다.스크립트는 본문 아래에 위치해야 합니다
으아아아가장 먼저 알아야 할 사항은 다음과 같습니다.
html 파일은 하향식으로 실행되지만 도입된 CSS와 자바스크립트의 순서가 다릅니다. CSS를 도입하고 로드할 때 프로그램은 여전히 하향식으로 실행되며, <script> 스레드가 중단되고 대기 중입니다. 스크립트 실행이 완료된 후에만 프로그램이 계속 실행됩니다.
그래서 온라인 토론의 대부분은 스크립트 스크립트를 <body> 뒤에 두는 것입니다. 그러면 스크립트 스크립트의 오랜 실행으로 인해 DOM 생성이 지연되거나 차단되지 않고 페이지 로딩 속도가 빨라집니다. .
그러나 일부 페이지 효과를 구현하려면 일부 js 스크립트를 미리 동적으로 로드해야 하기 때문에 본문 뒤에 모든 스크립트를 넣을 수는 없습니다. 따라서 이러한 스크립트는 <body> 앞에 배치되어야 합니다.
그래서 스크립트 배치의 원칙은 "페이지 효과 구현 클래스를 위한 js는 body 앞에 배치해야 하고, action, Interaction, event-driven js는 body 뒤에 배치할 수 있다"라고 생각합니다.
헤드에 배치되기 때문에 js 태그를 만나면 js가 아직 다운로드되지 않고 dom 렌더링이 완료되지 않아 현재로서는 js가 dom 요소를 얻을 수 없습니다.
먼저 스크립트를 헤드에 넣을 수 있는데, 많은 웹사이트에서 이런 식으로 사용하고 있습니다. 예를 들어 페이지가 열리면 휴대폰인지 PC JS 방식인지 판단해야 하는데, 등.
둘째, 귀하의 질문에 대한 답변을 약간 수정하여 테스트를 실행할 수 있게 되었습니다. js 부분만 변경되었으며 html 부분은 변경되지 않았습니다.
window.onload=function(){
으아아아}
그래서 js 코드가 잘못 작성되었을 수도 있습니다.
정말 감사합니다. 이제야 무슨 일인지 알겠어요! 그 제안은 매우 유용했고 나는 그것을 받아들였습니다.
으아아아답변란에 실수로 썼는데, 작성했으니 유용한 내용을 작성하고 코드 몇줄 추가해보겠습니다
Let lis[i].setAttribute('onclick','showPic( this); return false;'); 다음과 같이 작성해도 됩니다: