2010-12-08 9 views
0

입력 텍스트 컨트롤에 이벤트 핸들러를 추가하고 싶습니다. 컨트롤은 동적으로 생성됩니다.자바 스크립트에서 이벤트 핸들러를 설정하지 못했습니다.

var settings_check = new Array("checkVMName()","checkDiskMB()","checkMemMB()","checkEsx()","checkDatastore()"); 
... 
_inputbox = document.createElement("input"); 
_inputbox.type = "text"; 
_inputbox.id = settings[zindex]; 
_inputbox.onblur = settings_check[zindex]; 

_hint = document.createElement("hint"); 
_hint.id = settings[zindex] + "_Label2"; 
_hint.innerText = settings_hint[zindex]; 

mycurrent_cel2.appendChild(_inputbox); 
mycurrent_cel2.appendChild(_hint); 

하지만이 방법은 작동하지 않습니다

자바 스크립트 : 내 코드는 같다. 필자는 Firebug를 사용하여 HTML을 검사했으며 입력 텍스트 컨트롤에는 "onblur"속성을 전혀 사용하지 않았습니다.

는 HTML

<tr> <td>....</td> <td><input type="text" id="Datastore"> <hint id="Datastore_Label2">start with /</hint> </td> </tr> 

또한 이벤트 핸들러를 설정하는 다른 방법을 시도 같은

_inputbox.onblur = function(){alert("test");}; 

또는

_inputbox.setAttribute("onblur",func); 

네 ither 작동합니다. :

수동으로 onblur = function() {...}을 Firebug가있는 HTML의 입력 텍스트 컨트롤에 추가하고 실행하면 onblur가 작동합니다. 그래서 질문은 : for event handler for 자바 스크립트에서 제어? 내 코드에 뭔가 잘못이? 거기에 감사합니다.

, 이것은 완전히 잘못된

답변

2
당신은 그 (것)들에있는 함수 호출에 문자열 배열을 만드는

입니다 .

당신은에 참조을 할당해야 함수가 이벤트 발생시 호출되기를 원하는 함수 (() 또는 따옴표없이)의 이름을 배열에 저장하면된다. (기능 이전뿐만 아니라 현재 범위에 정의되어야한다) ULD 작업 :

var settings_check = [checkVMName, checkDiskMB, checkMemMB, checkEsx, checkDatastore]; 

따라서 본질적 settings_check 단순히 함수 참조 배열이다.

이 개념을 보여주는 jsFiddle example을 참조하십시오.

+0

감사합니다. Jacob. 나는 코드가 내 집 PC에 있고 나는 집에 없기 때문에 당신이 제안을 시도조차하지 않고 있어도 당신이 옳다고 믿습니다. 시도한 후에 알려 드리겠습니다. 다시 한 번 감사드립니다! – Landy

+0

@ Landy 알았어요. –

+0

늦게 업데이트하여 죄송합니다. 코드를 수정 한 후 제안한 함수에 대한 참조를 할당하면 코드는 여전히 이벤트 처리기를 호출하지 못했습니다. Firebug의 DOM보기에서 onblur 속성이 함수에 할당 된 것을 볼 수 있습니다. 그러나 그것은 단지 부름받을 수 없습니다. 그래서 아마 내 코드에 하나 이상의 오류가 있다고 생각합니다. 당신의 도움으로 첫 번째 문제를 해결했지만 여전히 왼쪽 그림을 잡으려고했습니다 ... 어떤 제안이 있습니까? 나는 그것에 대해 새로운 질문을하는 것을 고려하고있다. 감사합니다 – Landy

관련 문제