1

プログラムで作成した NumberTextBoxes がたくさんあります。今、キープレスでいくつかの値を計算する必要があるので、そのための関数を呼び出します...次のようになります:

...
<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 イベントと呼ばれるものがわかりません。

質問:

  1. 「onKeyPress」イベントを使用する場合、最新の値を取得するにはどうすればよいですか? つまり、「123」と入力すると、フィールドの値/displayedValue にアクセスすると「123」が返されます。

  2. 「onChange」を使用する場合、onChange イベントを発生させた要素の ID を取得するにはどうすればよいですか? (それは evt.target.id ほど単純ではありませんよね? それを試してみましたが、うまくいきませんでした)

  3. または、2 つを組み合わせて使用​​する必要がありますか? 同様に、onKeyPress を介して発信者の ID を取得し、onChange を介してユーザーが入力した更新された値を取得しますか?

ありがとう!

4

3 に答える 3

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));
  }
}
于 2010-08-04T13:42:53.160 に答える
1

I would seriously consider using the onkeyup event instead. found this in another stackoverflow answer:

Because you are using key-press event. key press has 3 phase:

  1. Key down: when key is press
  2. Key hold: key is hold down
  3. Key up: key is release In your case, problem can be solved by using keyup event
于 2010-10-21T08:52:52.237 に答える
0

過去2年間にAPIが変更されたという理由だけで、これがわからない-しかし:

mytextbox.get("value")イベントが発生したときに最新の値を提供します

(注意:mytextbox.valueテキストボックスが検証されるまで、最新の値は提供されません)

于 2013-01-28T15:48:17.707 に答える