novasera

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
  • total
  • today
  • yesterday
2009. 12. 15. 14:13 Programming(Web)/JAVASCRIPT
posted by novasera
2009. 12. 14. 17:13 Programming(Web)/JAVASCRIPT

아이구 머리야.... 이번에도 IE,  FF와 크롬의 차이 때문에 머리가 어질 어질 하다.

html 코딩으로 onclick = aa();  식의 이벤트 등록이 아니라

동적으로 이벤트를 등록해야 하는 일이 있었다.

보통 대상 object가 동적으로 생성됐을 경우 스타일이다 뭐다 셋팅해주면서

이벤트도 셋팅하게 되는데, 여러가지 방법이 있었지만 IE와 FF계열 양쪽 모두 되는 것을

찾기 힘들었다.

더군다나 내 경우는 <td></td> 사이에 들어갈 텍스트와 그 텍스트를 눌렀을 때 실행 될

함수명이 배열 형식으로 전달 되기 때문에 

arguments[i][0] : 텍스트
arguments[i][1] : 함수명

형식으로 써야만 했다.

그래서 처음에는 

newCell.onclick = function()
{
arguments[i][1];
}

이런식으로 했는데 arguments[i][1];을 그대로 해석해서인지 정상 동작하지 않았다.

지금 생각해보면 eval(arguments[i][1]); 식으로 해보는건 어떨까 하는데 확인은 하지 안했다.

못한게 아니다. 머리가 아파서 하기 싫은거다!!!! (지금은 쉬고 싶다구. ㅠㅠ)

그외 시도해본 케이스들은...

newCell.onclick = arguments[i][1]; // IE : x
newCell.attachEvent("onclick", arguments[i][1]); // IE : x (형식 틀리다함)
newCell.setAttribute('onclick', arguments[i][1]); //FF에선 됨

등등...그 외에 또 몇개가 있었던거 같은데, 그때 그때 써 놓질 않아서 누락된게 몇개 있다.

아무튼 결론은 아래 방법을 찾아서 해결했다.

if (newCell.addEventListener)
{
newCell.addEventListener("click", eval(arguments[i][1]), false);
}
else if ( newCell.attachEvent )
{
newCell.attachEvent("onclick", eval(arguments[i][1]));
}
else
{
newCell["onclick"] = eval(arguments[i][1]); // same as "obj.onType = fn"
}

FF인지 IE인지 그외인지 구분해서 각각에 맞게 등록시켜주는 방법이다.


[참고 사이트들]

http://junho85.tistory.com/tag/addEventListener (댓글에서 결정적 답변 얻음)


기타 PHPSCHOOL의 무수히 많은 질문과 답변들.

추가.

addEventListener의 마지막 인자에 대한 자세한 설명 : http://okjungsoo.tistory.com/entry/Event-처리


posted by novasera
2009. 12. 11. 17:14 Programming(Web)/JAVASCRIPT
if문에서 undefined 값을 비교값으로 사용하려면

if( aaa == 'undefined') ~~  이렇게 하면 안되고,

if( aaa == null) ~~  이렇게 null로 해야 한다.

쉽지만 햇갈릴 때가 많아요오.

'Programming(Web) > JAVASCRIPT' 카테고리의 다른 글

[JQuery] jQuery API 레퍼런스  (0) 2009.12.15
[JS] object에 동적 이벤트 할당  (0) 2009.12.14
[JS] 브라우저별 북마크 스크립트  (0) 2009.10.26
[etc] js 소스정리  (0) 2009.10.06
[JS] checkbox의 배열  (0) 2009.09.18
posted by novasera
2009. 10. 26. 15:13 Programming(Web)/JAVASCRIPT
posted by novasera
2009. 10. 6. 18:10 Programming(Web)/JAVASCRIPT

javascript 파일 중 압축된 파일을 다시 풀어주는 웹사이트


posted by novasera
2009. 9. 18. 20:54 Programming(Web)/JAVASCRIPT

체크박스를 여러개 두고 그 중  체크한 것만 처리하는 것이였는데,

배열만 염두해두고 썼더니 오히려 한개만 체크 했을 때는 체크한 checkbox의 값을 가져오지 못했다.

그래서 아래 내용을 참고해서 해결.



주의 할 점을 하나 배웠는데,

getElementById 와 getElementsByName

이 두가지에서 name은 s가 들어간다는 걸 조심해야 한다는 것이다.
posted by novasera
2009. 9. 18. 12:41 Programming(Web)/JAVASCRIPT



요약 : IE의 event를 firefox에서도 사용 하려면 event를 인자로 넘겨줘야 한다.




요약 : 또한 마우스 버튼 식별 값이 넷스케이프류와 IE가 서로 다르기에 따로 처리해줘야 한다.
         ( IE : event.button , 넷스 : e.which )

[추가]
이벤트를 발생시킨 객체를 가리키는 event.srcElement는

IE에서만 작동하고

FF, 크롬에선 event.target  (event는 전달받은 event를 사용) 라고 해야 된다.

posted by novasera
2009. 9. 16. 18:31 Programming(Web)/JAVASCRIPT
posted by novasera
2009. 9. 8. 15:00 Programming(Web)/JAVASCRIPT



적용사례 (요약)

...
if(tgtObj[i].id == objId)
{
tgtObj[i].className = "";
}
else
{
tgtObj[i].className = "dn";
}
...



posted by novasera
2009. 9. 1. 10:33 Programming(Web)/JAVASCRIPT
posted by novasera