手动更改后 Dojo Textarea 触发 onChange

Posted

技术标签:

【中文标题】手动更改后 Dojo Textarea 触发 onChange【英文标题】:Dojo Textarea trigger onChange after manual change 【发布时间】:2016-03-02 14:26:26 【问题描述】:

现有的 Dojo 1.10 页面具有以下 html 文本区域(我没有能力更改源代码):

<textarea tabindex="40" data-qbo-bind="value: payeeMessage" class="customerMessage" data-dojo-attach-point="_gridTabTarget" maxlength="1000"></textarea>

我一直在尝试创建一个 javascript 来更改 textarea 的内容,以便在提交表单时保存该值。我已经能够更改内容,但它永远不会被保存,因为不知何故,我需要在更改值后生成一个 onChange 触发事件。

我的代码看起来像这样,但它不会触发事件:

dojo.query(".customerMessage").connect("onchange", function()  alert("Changed!"); );
var widget_node = dojo.query(".customerMessage")[0];
widget_node.innerHTML="123123";
widget_node.onchange();

非常感谢任何帮助

【问题讨论】:

已尝试使用 onkeyuponblur 事件而不是 onchange 欢迎!请发布一个 jsfiddle,以便我们更好地回答。谢谢! 我试过 onkeyup 但行为是一样的。就像我刚刚发布的 jsFIddle 一样,只有在我手动修改 textarea 时才会触发该事件 【参考方案1】:

获取您的小部件并使用this.set('value', value) 使用change 事件传递的值更新您的小部件。

示例(请打开控制台):

https://jsfiddle.net/s5620bwd/3/

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
  );
);

<div id="button"></div>

在您的代码中,您应该在回调中为onChange 添加this.set('value', value);

【讨论】:

谢谢,但我找不到如何将您的代码应用于我刚刚发布的 jsFiddle 示例。我在你的中看到,你正在创建一个新的 textarea,但我需要检索一个现有的。【参考方案2】:

如果您遇到change 事件无法按预期为textarea 元素工作的问题,您可能需要将data-dojo-props="intermediateChanges: true" 添加到textarea

【讨论】:

以上是关于手动更改后 Dojo Textarea 触发 onChange的主要内容,如果未能解决你的问题,请参考以下文章

Dojo onBeforeTransitionIn 未触发

Dojo on (events) 在声明时触发

在 Dojo CheckBox 中手动触发点击事件

以编程方式更改 html 选择下拉菜单后,onchange 不会触发

没有为 dojo 的 DataGrid 触发事件

以编程方式更改值时触发Dojo Select onChange事件触发