2013-08-18 151 views
0

我使用Dojo为此,但怀疑这个问题是原生的JavaScript而不是特定的dojo。我创建了一个文本框并注册了一个函数,当onInput事件被触发时(我已经用onKeyPress,onKeyUp和onKeyDown尝试了这一点,所以基本上所有的事件将在用户输入文本时触发)。JavasScript文本框值没有更新,直到焦点丢失

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

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

当我输入“TES”进入(初始为空)文本框中

,I'get在控制台日志三行如下:

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

如果我的n点击网页的其他位置,然后再返回到文本框,然后再次输入,说“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); 

     } 

    } 
+0

请添加您使用的代码。 –

回答

1

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

+0

完美的感谢 - 这已经解决了这个问题。 – Kate

相关问题