在为dijit / form / TextBox正确设置值时,如何避免触发事件'change'?

时间:2016-03-04 13:11:57

标签: javascript javascript-events dojo

我需要更改窗口小部件value的属性dijit/form/TextBox,但我注意到每当我在窗口小部件上使用widget.set('value','some value');事件change时会发生什么。

我需要以编程方式正确地更改它,但不会触发change事件。知道如何实现它吗?

https://jsfiddle.net/s5620bwd/6/

require(['dijit/form/TextBox', 'dojo/on'], function(TextBox, on) {
  var textBox = new TextBox({
    intermediateChanges: true
  }, 'button');
  on(textBox, 'change', function(value) {
    this.set('value', value);
    console.log(this.get('value')); // widget updated
  });

  // change value programmatically
  textBox.set('value', 'value change programmatically');
});

1 个答案:

答案 0 :(得分:2)

TextBox小部件有一个名为textbox的属性,它对应于小部件中包含的输入元素。如果在元素上设置值,则不会触发任何事件侦听器。

require(['dijit/form/TextBox', 'dojo/on'], function(TextBox, on) {
  var textBox = new TextBox({
    intermediateChanges: true
  }, 'button');
  textBox.on('change', function(value) {
    // this event handler will not fire
    this.set('value', value);
    console.log(this.get('value'));
  });

  textBox.textbox.value = 'my new value';
});

此外,要将事件处理程序附加到窗口小部件,您应该使用窗口小部件自己的on方法来附加处理程序。