사용자가 콘서트 티켓을 예약 할 수있는 페이지가 있습니다. 먼저 아티스트를 클릭하여 예약 프로세스를 시작하고 시작 기능에 "아티스트"를 전달합니다.
그런 다음 프로그램은 아티스트를위한 장소를로드합니다. 사용자가 장소를 변경하면 (값이 비어 있지 않음) 다른 함수를 호출하여 다른 선택 드롭 다운 메뉴에서 사용 가능한 날짜를로드하려고했습니다.
원래 코드는 다음과 같습니다.
<select onchange="loadDates(artist)">...</select>
그러나 어떤 이유로 시작 함수에서 다음 함수로 매개 변수를 전달하지 않았습니다.
그래서 나는 그것을 변경했습니다.
<select onchange="loadDates.call(this, artist)">..</select>
그러나 다음 기능을 실행하려고 할 때 "아티스트가 정의되지 않았습니다"라는 오류가 계속 표시됩니다. 내가 온라인에서 이것이 완벽하게 작동한다는 것을 읽을 때 누구든지 내가 여기서 뭘 잘못하고 있는지 볼 수 있습니까? 필요한 경우 더 많은 정보를 제공 할 수 있습니다. 감사
onXyz
속성의 코드는 전역 범위에서 실행되므로 두 예제 모두 라는 전역 변수 가 있어야합니다 artist
. 하나 ReferenceError
가 없으면 정의되지 않은 기호의 값을 취하려고하기 때문에 a가 표시됩니다.
문자열을 전달하려는 경우에는 따옴표로 묶으십시오. 다른 것을 통과하려는 경우 그게 무엇인지 말해야합니다. 그러나 근본적인 문제는 artist
글로벌 범위에서 정의 된 기호가 아니라는 것입니다.
전역이artist
아닌 위치에서 정의한 경우 (좋은! 전역은 나쁜 것입니다)onXyz
속성을 사용하는 대신 최신 기술을 통해 이벤트 처리기를 연결하고 싶을 것 입니다.
DOM 라이브러리 (jQuery 등)를 사용하지 않는 경우 가장 간단한 방법 onXyz
은 선택 상자 요소 의 속성에 할당하는 것 입니다.
(function() { // Something to keep the stuff inside from being globals
var artist = "Joe Cocker";
var selectBox = document.querySelector("selector for the select box");
selectBox.onchange = function() {
loadDates(artist); // `artist` is in scope now
};
})();
그러나 일반적으로 onXyz
속성은 요소 당 이벤트 당 하나의 처리기 만 허용하고 DOM 메서드 addEventListener
(및 Microsoft 고유의 전임자 attachEvent
)를 선호하므로 속성을 사용 하지 않습니다 . 나는 단순함을 위해 위에서 그것들을 사용하지 않았습니다. DOM 라이브러리를 사용하지 않는 경우이 hookEvent
함수 가있는 addEventListener
경우 또는 attachEvent
없는 경우를 사용하고 attachEvent
브라우저에 누락 된 비트를 제공하는 다른 답변에 제공 되기를 원할 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다