2014-09-05 6 views
0

순수한 JavaScript (JQuery 없음)를 사용하는 웹 사이트가 있고 텍스트 상자에 이벤트를 트랩하려고합니다. 텍스트 상자가 테이블에 있으며 페이지에 여러 개의 테이블 (고유 ID가있는 테이블)이있을 수 있습니다. 텍스트 상자는 Javascript에 의해 동적으로 생성되고 HTML 표가 브라우저로 전달 된 후 표에 추가됩니다.자바 스크립트; 이벤트에 인수를 추가하는 방법?

onkeyup 이벤트를 트랩하려고하고 이벤트를 트리거 한 텍스트 상자가 포함 된 테이블을 알고 있습니다.

onkeyup 이벤트에 연결되는 함수는 방금 가져온 키에 대한 정보를 제공하는 인수 (이벤트 자체)와 함께 호출됩니다. 대단하다. 나는 그것을 얻을 수있다. 나는 그 열쇠를 안다. 다 좋다.

textbox.onkeyup = my.namespace.textboxAge; 

my.namespace.textboxAge = function (event) { 
    console.log("I got the event:" + event.ToString()); }; 

내가해야 할 일은 함수 호출에 추가 정보를 첨부하여 원래 이벤트와 테이블 또는 테이블 ID를 얻는 것입니다.

내가 같이가 onkeyup 이벤트에 뭔가를 내 핸들러를 연결할 때 나는 테이블 참조의 함정에 폐쇄에 대해 생각 ...

var table = document.getElementByID("table5"); 
textbox.onkeyup = function (event,table) { 
    console.log("I got event:" + event.ToString() + " on table " + table.id); } 

을하지만이 작동하지 않는, 이벤트가 설정되지 않은 상태 클로저 함수가 첨부되어 있으므로 onkeyup이 발생하면 null이 유지됩니다.

나는이 문제를 해결했지만 이벤트에 정보를 추가하는 방법에 대해 혼란스럽고 가능한지, 어떻게해야하는지 알고 싶습니다.

답변

0

이벤트 기능에서 인수를 제거하십시오. 코드에서 table 변수는 이벤트 함수 호출에서 겹쳐 쓰입니다.

var table = document.getElementByID("table5"); 
textbox.onkeyup = function (event) { 
    console.log("I got event:" + event.ToString() + " on table " + table.id); } 
+0

네,하지만 나는 테이블 변수, 즉 전체 지점의합니다. 이벤트와 테이블을 얻는 방법은 무엇입니까? 시도해 줘서 고마워. –

+0

당신은 * 테이블 변수를 얻습니다. 이것이 클로저의 전체 지점입니다. 내가 입력 한 코드와 정확히 일치하는 것은 당신이 원하는 것이 아닙니다. – jlahd

+0

아, 아마도 내가 잘못 이해 한 것 같습니다. '닫힌 테이블 변수가 덮어 쓰게됩니다'라고 말했을 때 나는 테이블 변수를받지 못한다고 생각했습니다. 나는 그것을 시험해야 할 것이다. 도와 주셔서 감사합니다. –

0

이 키를 누르면되는 정보 외에도, 원래 이벤트가 이벤트를 실행 한 DOM 요소에 대한 포인터를 포함합니다 : 당신은 매개 변수 목록에서 생략하면 원래 값을 가지고있다. .srcElement 또는 다양한 브라우저에있는 것이 무엇이든간에 이것은 이벤트를 발생시킨 텍스트 상자에 대한 참조 일 것입니다. .parentNode으로 루핑하여이 요소의 DOM 트리를 추적하고 어느 테이블에서 조회했는지 확인할 수 없습니까?

편집 :

OK, 즉 위의 코드를 보면, 말했다에, 그래서, 당신은 핸들러 자체에 대한 추가 정보를 추가 할 수 있습니다. 이것은 아마도 가장 "올바른"그것을 할 수있는 한 방법입니다 :

textbox.onkeyup = function (extra1, extra2) { 
    alert(extra1); 
    alert(extra2); 
    alert(event); 
}.bind(null, 'foo','bar'); 

는 여기에 바이올린입니다 : http://jsfiddle.net/it_turns_out/u0cnzpwd/2/

+0

좋은 지적.이 문제를 해결하고 테이블 참조로 이벤트를 덮어 쓰면이 문제를 해결할 수 있습니다. 나는 정말로 주위의 일을 찾고있는 중이 아니며 미래에 대한 사건과 함께 임의의 추가 데이터를 전송할 방법을 찾고 있지만 가능하지 않을 수 있습니다. 답장을 보내 주셔서 감사합니다. 아무런 문제가없는 경우,이 질문은 완벽하게 유효합니다. –

+0

좋아, 지금 편집, 내가 생각하는 것 –

+0

이게 재미있어 보이는데, 전에 바인드를 사용하지 않았어. 나는 그것을 설정하고 그것을 시도하고 그것에 대해 돌아올 것입니다. 나는 주말에 이것을 할려고 노력할 것인데, 대단히 감사합니다. –