我为此使用 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);
}
}