2010-06-21 4 views
1

프로그래밍 방식으로 만든 NumberTextBoxes가 여러 개 있습니다.Dojo : onKeyPress 또는 onChange에서 NumberTextBox의 최신 값을 얻는 방법?

... 
<head> 
... 
function setNumTextBox() { 
    ... 
    var val = { 
     name: "mytextbox", 
     onKeyPress: keyPressFxn 
    } 
    new dijit.form.NumberTextBox(val, "mytextbox"); 
} 

function keyPressFxn(evt) { 
    // do the processing here 
} 
... 

지금, 내 문제는 이것이다 : 지금, 나는 내가 그것을 위해 함수를 호출 할 수 있도록 키를 누를 때 일부 값을 계산해야한다 ... 이런 식으로 뭔가를 찾습니다. 사용자는 "12"라고 입력합니다. 사용자가 "1"을 입력하면 dijit.byId ("mytextbox"). attr ("value")은 ""입니다. 사용자가 "2"를 입력하면 값은 "1"이됩니다. 요컨대, 함수에서 얻은 값 (내가 "displayedValue"속성을 시도했습니다)은 최신 값이 아닙니다.

"intermediateChanges : true"를 사용하려고했지만이 경우 텍스트 상자에서 작동하지 않습니다. 이제 "onKeyPress"대신 "onChange"이벤트를 사용했습니다. 올바른 값을 얻을 수 있지만 ... onChange 이벤트를 호출하는 것이 무엇인지 알 수 없습니다.

질문 : 나는 "때 onKeyPress"이벤트를 사용하는 나는 경우

  1. 는 어떻게 최신 값을받을 수 있나요? 의미, "123"을 입력하면 필드의 value/displayedValue에 액세스 할 때 "123"이 표시됩니다.

  2. "onChange"를 사용하면 onChange 이벤트를 발생시킨 요소의 ID를 얻는 방법은 무엇입니까? (그것은 evt.target.id처럼 간단하지 않습니다. 그 중 하나가 작동하지 않는다고 생각했습니다.)

  3. 아니면 2의 조합을 사용해야합니까? 마찬가지로, onKeyPress를 통해 호출자의 ID를 얻은 다음 사용자가 onChange를 통해 입력 한 업데이트 된 값을 가져 옵니까?

고마워요!

답변

2

이렇게하면 원하는 것을 얻을 수 있습니다. dojo.keys.CLEAR 및 dojo.keys.DELETE 상수를 추적해야 할 수도 있습니다.

function keyPressFxn(evt) { 
    var value = this.value; 
    if (dojo.keys.BACKSPACE == evt.keyCode) { 
    console.log(value.substr(0, value.length - 1)); 
    } else { 
    console.log(value + String.fromCharCode(evt.charCode)); 
    } 
} 
+0

아 감사합니다! – callie16

+0

하지만 어떤 이벤트를 사용합니까? –

1

대신 onkeyup 이벤트를 사용하는 것이 좋습니다. found this in another stackoverflow answer :

키 누르기 이벤트를 사용하고 있기 때문에.

  1. 키 다운 : 키를 눌러
  2. 키 홀드 : 키
  3. 키까지 누르고 있습니다 : 키를 눌러 3 단계가 키 귀하의 경우 릴리스입니다, 문제는 이벤트의 keyup 사용하여 해결 될 수있다
+0

감사합니다. – callie16

0

확실하지 경우이 바로 API가 최근 2 년에 변경 되었기 때문에 -하지만 :

mytextbox.get("value")이 같은 날짜 값에 최대를 제공합니다 이벤트가 발생

(그래도 조심 : 텍스트 상자가 확인 된 후까지 최신 값을 제공하지 않습니다 mytextbox.value) ... 그게있을 수