문제

아래 코드의 경우 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에서는 $() 이러한 프로토 타입을 적용하도록 함수.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top