0

我为此使用 Dojo,但怀疑这个问题是 JavaScript 原生的,而不是特定于 dojo 的。我创建了一个文本框并注册了一个在触发 onInput 事件时要调用的函数(我已经尝试使用 onKeyPress、onKeyUp 和 onKeyDown 进行此操作,因此基本上是用户输入文本时将触发的所有事件)。

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

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

当我在(最初为空的)文本框中键入“tes”时,我在控制台日志中得到三行,如下所示:

LOG:搜索:
LOG:搜索:
LOG:搜索:

如果我然后单击页面上的其他位置,然后返回文本框并再次输入,说“t”,我得到:

LOG:搜索:tes

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

LOG:搜索:测试

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

谢谢西蒙

编辑:
根据要求,这里是代码(来自我的 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);

        }

    }
4

1 回答 1

2

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

于 2013-08-18T11:18:30.843 回答