Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

파이어폭스에서 button태그에 onclick이 안먹히는 문제

크로스브라우징에 대한 부분이다. 지금 멀 만들고 있는데 당장 급한 분위기는 아니고 혼자만들고 있고 해서 개인적인 욕심으로 XHTML을 지키고 브라우저 호환성을 좀 유지하면서 만들고 싶었다. 그래서 기본적인 기능 구현하면서 파이어폭스(Firefox)에서 테스트를 돌렸는데 특정버튼들이 먹히지 않는 문제점을 발견했다.


<script type="text/javascript">
    function testMethod()
    {
        document.location.href="file.asp";
    }
</script>

<button onclick="testMethod();">눌러</button>

(평소처럼 복사해 온게 아니라 틀리지 않았나 몰라.. ㅡ..ㅡ)

어쨌든 로직은 필요없으니 보자면 저런 구조다. 버튼을 클릭하면 자바스크립트 메서드가 호출되는 상황.

IE에서는 아무런 문제가 없었다. 그런데 파이어폭스에서는 아무런 동작도 되지 않았다. 계속적인 테스트.....

일단 펑션자체는 잘 먹었다. <a>로 태스트했더니 location.href는 잘 동작했는데 <button>에서만 동작을 안해서 처음에는 onclick가 안되는 줄 알았는데 또 다른 <button>에서 onclick으로 호출된 펑션이 폼.submit의 형태를 띄고 있는 건 또 잘 작동이 됐다.

location.href가 안되는거냐... onclick이 안되는거냐... 엄청 고민했다.. 찾고 또 찾고....

역시 구글링... 구글링으로 찾은 외국사이트가 날 살렸다. 해결법과 이유까지 확실히....

파폭에서 <button>은 기본적으로 submit의 형태로 동작을 한다. 그래서 submit이 있는 경우는 제대로 동작하지만 submit이 없으니 동작이 무시되어 버린 것이다.

해결책은 return false;가 있으면 된다. 펑션안에 있어도 되고.... 호출할 때 onclick="testMethod();return false;"와 같이 써주거나 onclick="return testMethod();"로 써주면 정상적으로 작동한다.


덧) 이거 하는데 2시간도 더 걸렸다.. ㅡ..ㅡ 근데 평소 올블에서의 분위기로 느껴지던 웹표준과 크로스브라우징.... 막상 자료를 찾으니까 자료가 거의 없다.. ㅠ..ㅠ 아직 내가 체감하는것 만큼의 중요한 이슈가 아닌건가? ㅡ..ㅡ
2007/11/09 00:29 2007/11/09 00:29