【问题标题】:.on('change' ...) doesn't trigger for data changed by JS.on('change' ...) 不会触发 JS 更改的数据
【发布时间】:2019-01-10 05:31:11
【问题描述】:

我正在尝试在输入文本框更改时触发事件:

$('.packeta-selector-branch-id').on('change', function () { alert('helo'); })

这仅适用于我在文本框中手动输入内容,但在我的情况下,外部 javascript 正在设置文本框值,但不起作用。

我创建了一个小 jsfiddle 来展示这个:

https://jsfiddle.net/6vnuqxa0/

试用:

  1. 点击选择取货点
  2. 从列表中选择一些东西,然后点击“选择此上车点”。

任何想法如何解决这个问题?

【问题讨论】:

  • 这是 IMO 唯一有效的 MutationObserver 用例:当您无法控制更改输入的代码时。如果您可以控制更改输入的代码,那么只需让它在更新值后触发文本框的 onchange 事件。

标签: javascript jquery


【解决方案1】:

jQuery watch for domElement changes? 的选定答案建议绑定到DOMSubtreeModified 事件。我已经尝试过你的小提琴并且它有效!答案确实提到此事件可能已被弃用,但值得研究。

在您的情况下,将 id 添加到您的 div 以便您拥有:

<div id="packeta-selector-branch-id" class="packeta-selector-branch-id"></div>

那么下面的代码会在那个div的内容发生变化时触发alert。

$('#packeta-selector-branch-id').bind('DOMSubtreeModified', function(e) {
  if (e.target.innerHTML.length > 0) {
    alert('helo');
  }
});

否则,我会查看小部件本身并尝试确定它是否在选择时触发任何事件。如果是这样,您可以将一些行为附加到该事件。

【讨论】:

    【解决方案2】:

    点击按钮时触发('change')。但是您输入的 ID 或名称会更好

    $(document).off('click', '.button select-branch').on('click', '.button select-branch', function(){
        $('.packeta-selector-branch-id').trigger('change');
    })
    

    【讨论】:

    • 并删除
      以结束 "
      "
  • 您应该将其编辑到您的答案中,并解释您的答案以便更有帮助。
  • 猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2015-09-27
    • 2018-09-20
    • 2021-10-25
    相关资源
    最近更新 更多