我有一个

<input id="myTextBox" data-dojo-type="dijit/form/TextBox" data-dojo-props="value: at(model, myValue)" />


当我尝试将值从model.myValue复制到另一个input时(例如

window.setInterval(
  function() { document.getElementById("theOtherInput").value = model.myValue; }, 1000);


我注意到,在myTextBoxmodel.myValue失去焦点之前,<input>的值不会与myTextBox同步。即-除非我离开输入字段theOtherInput,否则myTextBox将不会更新。

如何在每次击键时强制dojo将输入与绑定变量进行同步?我认为这应该是默认行为,或者至少应该毫不费力就可以实现,但是我找不到合适的属性来做到这一点。有任何想法吗?

对我来说,主要问题是,当我按Enter键提交表单时,model.myValue仍具有输入myTextBox成为焦点之前的值。 (而且我不想使用setInterval进行黑客攻击-我只想让dojo进行将输入与模型同步的工作)

最佳答案

最接近的方法是将intermediateChanges属性设置为true并附加一个onChange事件。像这样:

<input id="myTextBox" data-dojo-type="dijit/form/TextBox"
       data-dojo-props="intermediateChanges: true"
       data-dojo-attach-event="onChange: _myOnChange"
       data-dojo-props="value: at(model, myValue)" />


现在,在小部件内部,_myOnChange函数将在每次有价值的击键或更改内容时运行。

_myOnChange: function(newValue){
  console.log(newValue);
  document.getElementById("theOtherInput").value = newValue;
}

08-25 13:10