我正在使用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);
}
}
答案 0 :(得分:1)
如果您使用dijit/form/TextBox
,则可以将intermediateChanges
属性设置为true。这将使用onKeyPress
事件更新窗口小部件的值,而不是onBlur
事件。