在焦点丢失之前,Javascript文本框值不会更新

时间:2013-08-18 09:48:28

标签: javascript dojo

我正在使用Dojo,但怀疑这个问题是JavaScript原生的,而不是dojo特有的。我已经创建了一个文本框并注册了一个在onInput事件被触发时要调用的函数(我已经用onKeyPress,onKeyUp和onKeyDown尝试了这个,所以基本上当用户输入文本时会触发所有事件)。 / p>

事件被解雇,因此效果很好。问题是在方法中我引用了文本框值并且没有得到更新。仅当文本框失去焦点时,才会更新文本框值。当我再次输入框时,我得到失去焦点后的值,即不包括触发事件的附加按键。所以,这是被称为onInput的代码:

console.log("searching for: " + this.textbox.value);

当我在(最初为空)文本框中输入“tes”时,我在控制台日志中记录如下三行:

  

日志:搜索:
  日志:搜索:
  日志:搜索:

如果我然后点击页面上的其他地方,然后返回到文本框并再次输入,说't',我得到:

  

日志:搜索:tes

如果我再次点击,然后返回并输入,说“1”,我得到:

  

日志:搜索:测试

我确定我在某个地方犯了一个愚蠢的错误。谁能告诉我如何在触发按键类型事件后立即获取文本框的当前内容,而不是最后一次失去焦点之前的值?

由于 西蒙

修改
根据要求,这里是代码(来自我的SearchUtils.js类),包括将intermediateChanges属性设置为true,这解决了问题,这有助于其他任何人引用它。

    // Create the Search UI
    createUI: function (elementName) {

        // Get a reference to attach the UI to
        var element = dojo.byId(elementName);
        if (element) {

            // Add a text box to enter the search text
            this.textbox = new dijit.form.TextBox({
                id: "txtSearch",
                intermediateChanges: true
            });
            this.textbox.on("change", lang.hitch(this, this.search));
            this.textbox.placeAt(element);

        }

    }

1 个答案:

答案 0 :(得分:1)

如果您使用dijit/form/TextBox,则可以将intermediateChanges属性设置为true。这将使用onKeyPress事件更新窗口小部件的值,而不是onBlur事件。