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

r8uurelv  于 2022-12-16  发布在  Dojo
关注(0)|答案(1)|浏览(145)

我需要更改小部件dijit/form/TextBox的属性value,但我注意到每当我使用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');
});
f0brbegy

f0brbegy1#

TextBox小部件有一个名为textbox的属性,它对应于小部件中包含的input元素。如果您设置了该元素的值,它将不会触发任何事件侦听器。

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方法附加处理程序。

相关问题