【问题标题】:Dojo Textarea trigger onChange after manual change手动更改后 Dojo Textarea 触发 onChange
【发布时间】:2023-03-19 06:59:01
【问题描述】:

现有的 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 时才会触发该事件

标签: events dojo 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。

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2021-04-26
    相关资源
    最近更新 更多