>  기사  >  웹 프론트엔드  >  내 JavaScript 기능이 양식 요소의 ID와 충돌하는 이유는 무엇입니까?

내 JavaScript 기능이 양식 요소의 ID와 충돌하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-26 19:39:15336검색

Why Does My JavaScript Function Conflict with a Form Element's ID?

JavaScript 함수 이름이 요소 ID와 충돌합니다

문제:
JavaScript에서 함수는 다음을 가질 수 있습니다. 요소 ID와 이름이 동일합니다. 그러나 어떤 경우에는 이로 인해 오류가 발생할 수 있습니다. 다음 두 코드 조각을 고려하십시오.

// Works as expected
function border(border) { alert(border); }

const select = document.getElementById('border');
select.addEventListener('change', () => border(select.value));
// Fails with "not a function" error
function border(border) { alert(border); }

const form = document.getElementById('border');
form.addEventListener('change', () => border(form.value));

첫 번째 조각은 작동하지만 두 번째 조각은 실패하는 이유는 무엇입니까?

해결책:
이 문제 JavaScript 버전 1.0~1.3에 도입된 레거시 기능으로 인해 발생합니다. 양식 요소가 양식의 일부인 경우 양식의 속성을 상속합니다. 이러한 속성 중 하나는 요소 이름으로, 요소를 참조하는 데에도 사용할 수 있습니다.

두 번째 스니펫에서 함수 이름 "border"는 동일한 이름의 양식 속성과 충돌합니다. 이벤트 리스너가 트리거되면 JavaScript는 양식의 "테두리" 속성을 함수로 호출하려고 시도하지만 실패합니다.

W3C DOM 레벨 2 HTML 사양에 따르면 요소는 다음을 사용하여 이름이나 ID로 액세스할 수 있습니다. 대괄호 속성 접근자 구문. 그러나 이전 브라우저에서는 이 기능을 양식 컨트롤로 확장하여 점 표기법을 사용하여 이름이나 ID로 액세스할 수 있도록 했습니다.

충돌 방지:
이 문제를 방지하려면, 함수 이름이 요소 ID 또는 기타 JavaScript 속성과 충돌하지 않는지 확인해야 합니다. 또한 document.querySelector()와 같은 보다 구체적인 메소드를 사용하여 요소를 찾을 수 있습니다.

위 내용은 내 JavaScript 기능이 양식 요소의 ID와 충돌하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.