'이'항목에 대한 참조 IE의 클릭 오류
-
06-07-2019 - |
문제
아래 코드의 경우 IE에 몇 가지 문제가 있습니다. 함수로 전달 된 두 번째 매개 변수는 클릭 된 항목에 대한 참조 여야합니다. 이것은 FF와 Safari에서 잘 작동하지만 IE7에서 테스트하면 오류가 발생합니다. IE는 (콘솔에서 볼 수 있듯이) 요소를 얻는 것처럼 보이지만, 내가 그것으로 무엇이든 할 때마다 나는 오류를 얻습니다.
"물체는이 속성이나 방법을 지원하지 않습니다"
도와 주셔서 감사합니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
<script language="javascript" type="text/javascript">
var Test = {
doIt: function(str, btn) {
console.log(str);
console.log(btn);
if (btn.hasClassName('red')) {
console.log('has red');
} else {
console.log('doesn\'t');
}
}
};
</script>
<a href="#" onClick="Test.doIt('hello', this)" class="red">Test</a>
</body></html>
해결책
문제는 BTN이 자동으로 방법을 가지고 있지 않다는 것입니다. hasClassName
- 그것은 프로토 타입 확장입니다.
에게 프로토 타입 확장 기능으로 요소를 확장하십시오,이 라인을 상단에 추가하십시오 doIt()
:
btn = $(btn); // Extends element with Prototype functions.
코드는 거기에서 작동해야합니다.
다른 팁
프로토 타입을 사용할 때 IE의 페이지로드의 프로토 타입 기능으로 요소가 자동으로 확장되지 않으므로 구체적으로 전달해야하기 때문입니다. $()
호출하여 이러한 방법으로 요소를 확장하십시오. 이것을 기능의 맨 위에 추가하여 IE에서 작동하도록합니다.
doIt : function(str, btn) {
btn = $(btn);
}
편집하다: 명확히하기 위해, IE 7 (IIRC) 이외의 모든 브라우저에서 HTML 요소 아래에서 자동으로 프로토 타입이되지만 IE <= 7에서는 $()
이러한 프로토 타입을 적용하도록 함수.
제휴하지 않습니다 StackOverflow