Javascript 我可以捕获js触发的更改事件吗?

Javascript 我可以捕获js触发的更改事件吗?,javascript,jquery,html,Javascript,Jquery,Html,我可以使用jquery在用户单击选择选项时轻松捕获该选项的更改事件,但是如果javascript更改选择值,“更改”事件永远不会触发,需要手动触发 是否可以在不必手动触发('change')的情况下捕获值的变化 这里的小提琴示例: 是否可以在不必手动触发('change')的情况下捕获值的变化 否。当JavaScript代码设置select的值时,不会触发任何事件。因此,您的选择是: 有一个通用函数,您可以在响应change事件时调用,也可以在代码更改值时调用(可能是集中更改值,这样您就不会忘记

我可以使用jquery在用户单击选择选项时轻松捕获该选项的更改事件,但是如果javascript更改选择值,“更改”事件永远不会触发,需要手动触发

是否可以在不必手动触发('change')的情况下捕获值的变化

这里的小提琴示例:

是否可以在不必手动触发('change')的情况下捕获值的变化

否。当JavaScript代码设置select的值时,不会触发任何事件。因此,您的选择是:

  • 有一个通用函数,您可以在响应
    change
    事件时调用,也可以在代码更改值时调用(可能是集中更改值,这样您就不会忘记调用它)

  • .trigger('change')

  • 轮询该值以查看其是否更改(blech)

  • 关于1和2,你可以给自己一个
    valWithNotify

    $.fn.valWithNotify = function(arg) {
        if (arguments.length == 0) {
            return this.val();
        }
        return this.each(function() {
            $(this).val(arg).trigger("js-change"); // or just "change", but I'm not a
                                                   // fan of synthetic user events
        });
    };
    
    是否可以在不必手动触发('change')的情况下捕获值的变化

    否。当JavaScript代码设置select的值时,不会触发任何事件。因此,您的选择是:

  • 有一个通用函数,您可以在响应
    change
    事件时调用,也可以在代码更改值时调用(可能是集中更改值,这样您就不会忘记调用它)

  • .trigger('change')

  • 轮询该值以查看其是否更改(blech)

  • 关于1和2,你可以给自己一个
    valWithNotify

    $.fn.valWithNotify = function(arg) {
        if (arguments.length == 0) {
            return this.val();
        }
        return this.each(function() {
            $(this).val(arg).trigger("js-change"); // or just "change", but I'm not a
                                                   // fan of synthetic user events
        });
    };
    

    您的问题的全部内容必须在您的问题中,而不仅仅是链接,甚至不是到jsFiddle(因此,如果没有任何内容标记为代码,则警告将阻止您链接到jsFiddle)。链接会腐烂,使得问题及其答案对未来的人们来说毫无用处,人们不应该非得离开网站去帮助你。如果示例很重要,请将其放在问题中,最好使用堆栈片段(工具栏按钮)使其在相关情况下可运行。更多:您需要自己使用
    trigger('change')
    触发事件,或者只使用
    change()
    。两者都是解决这个问题的一种非常常见的方法。您可以使用
    MutationObserver
    ,但它们还没有得到很好的支持,而且这可能有点过头了您的问题还不清楚?你能详细说明一下你想要实现什么吗?很有趣,从未听说过mutationObserver,def不是这个意思,但很高兴知道。我问题的全部内容都在问题中。JSFIDLE只是一个例子,以防像user2181397这样的人仍然感到困惑。您问题的全部内容必须在您的问题中,而不仅仅是链接,甚至不是到JSFIDLE(因此,如果没有任何内容标记为代码,则警告会阻止您链接到JSFIDLE)。链接会腐烂,使得问题及其答案对未来的人们来说毫无用处,人们不应该非得离开网站去帮助你。如果示例很重要,请将其放在问题中,最好使用堆栈片段(工具栏按钮)使其在相关情况下可运行。更多:您需要自己使用
    trigger('change')
    触发事件,或者只使用
    change()
    。两者都是解决这个问题的一种非常常见的方法。您可以使用
    MutationObserver
    ,但它们还没有得到很好的支持,而且这可能有点过头了您的问题还不清楚?你能详细说明一下你想要实现什么吗?很有趣,从未听说过mutationObserver,def不是这个意思,但很高兴知道。我问题的全部内容都在问题中。JSFIDLE只是一个例子,以防像user2181397这样的人仍然感到困惑。*叹气。谢谢,我以为是这样的。*叹气。谢谢,我以为是这样的。