手动更改后 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();
非常感谢任何帮助
【问题讨论】:
已尝试使用onkeyup
和 onblur
事件而不是 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的主要内容,如果未能解决你的问题,请参考以下文章