8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

当输入值通过编程改变时触发改变事件?

Gleb Efimov 1月前

41 0

我的表单中有一个输入。如果我使用另一个 JavaScr 更改此文本框 (changeProgramatic) 中的值...

我的表单中有一个输入。

<input type="text" id="changeProgramatic" onchange="return ChangeValue(this);"/>

如果我使用另一个 JavaScript 函数更改此文本框 (changeProgramatic) 中的值,它将不会触发更改事件。(注意:我将“this”传递给方法)

帖子版权声明 1、本帖标题:当输入值通过编程改变时触发改变事件?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gleb Efimov在本站《symfony》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 你用的是 jQuery,对吧?将 JavaScript 与 HTML 分开。

    您可以使用 trigger triggerHandler .

    var $myInput = $('#changeProgramatic').on('change', ChangeValue);
    
    var anotherFunction = function() {
      $myInput.val('Another value');
      $myInput.trigger('change');
    };
    
  • 我想要的是这个 $(document).bind('mycustomevent', function (e, arg1, arg2, arg3) { /* ... */});

  • 为了其他人的利益简化这个答案,基本上只需在以编程方式更改文本输入值的函数中调用$(this).trigger('change');,其中\'this\'是文本输入。

  • 普通 JS 解决方案:

    var el = document.getElementById('changeProgramatic');
    el.value = 'New Value'
    el.dispatchEvent(new Event('change'));
    

    请注意,这 dispatchEvent 在旧版 IE 中不起作用(请参阅: caniuse )。因此,您可能只应在内部网站上使用它(而不是在受众广泛的网站上)。.

    因此,截至 2019 年,您可能只想确保您的客户/受众不使用 Windows XP(是的,有些人在 2019 年仍然使用)。您可能想使用 条件注释 来警告客户您不支持旧版 IE(在本例中为 IE 11 之前的版本),但请注意,条件注释仅在 IE9 之前有效(在 IE10 中无效)。因此,您可能想改用功能检测。例如,您可以进行早期检查: typeof document.body.dispatchEvent === 'function' .

  • 原来我试图触发 ReactJS 输入组件的事件。React 事件系统是一个额外的抽象层。

  • @Sunnyday 嗯... 这个示例脚本对我来说很好用:jsfiddle.net/eccenux/tg9o7wqy/6 。你是指一些自定义事件吗?你是指 Edge-Edge(旧版,内置于 Windows 10)还是 Edge-Edgy(基于 Chromium)?

  • 通过添加气泡为我工作:true......el.dispatchEvent(new Event('change',{'bubbles':true}));

  • Park 1月前 0 只看Ta
    引用 9

    如果有人正在使用 React,以下内容将会很有用:

    https://.com/a/62111884/1015678

    const valueSetter = Object.getOwnPropertyDescriptor(this.textInputRef, 'value').set;
    const prototype = Object.getPrototypeOf(this.textInputRef);
    const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
    if (valueSetter && valueSetter !== prototypeValueSetter) {
        prototypeValueSetter.call(this.textInputRef, 'new value');
    } else {
        valueSetter.call(this.textInputRef, 'new value');
    }
    this.textInputRef.dispatchEvent(new Event('input', { bubbles: true }));
    
  • 这不仅对 React 有用。其他答案都缺少 Bubbles: true,而这个答案有这个关键部分。

  • 引用 11

    \'{bubbles: true}\' 为我节省了数小时的进一步挖掘,对于遇到类似问题的人来说绝对值得一试

  • 当以编程方式更改值时,您需要调用 input 事件,而不是 change 事件。

    注意:每次元素的值发生变化时,都会触发 input 事件。这与 change 事件不同,change 事件仅在值被提交时触发,例如按下 Enter 键、从选项列表中选择一个值等。

    const el = document.getElementById('changeProgramatic');
    el.value = 'New Value'
    el.dispatchEvent(new Event('input', { 'bubbles': true }));
    
返回
作者最近主题: