【问题标题】:JQuery does not execute on $(document).change()JQuery 不在 $(document).change() 上执行
【发布时间】:2012-09-19 12:54:18
【问题描述】:

当页面/文档发生更改时,我需要执行一些 JQuery - 在这种情况下,当显示具有特定 CSS 类的 div 时。

我有以下 JQuery 代码:

   <script>
           $(document).change(function () {
               if ($('.validation_errors').length) {
                   alert("test");
               }
           }
    </script>

但是,它不会执行并显示警报。我在这里遗漏了什么吗?

【问题讨论】:

  • change 事件永远不会在 document 上触发。它仅限于输入、文本区域和选择。你到底想达到什么目的? “页面/文档更改”是什么意思?
  • 更重要的是,change 事件不会响应 DOM 更改而触发。文档上的处理程序捕获在文档内的输入上触发的change事件,但这个问题与change事件无关

标签: jquery css asp.net-mvc


【解决方案1】:

更改仅适用于输入、文本区域或选择元素。相反,您需要将函数绑定到 DOMSubtreeModified 突变事件:

$(document).bind('DOMSubtreeModified', function () {
   if ($('.validation_errors').length) {
       alert("test");
   }
});

编辑:如果您的目标浏览器支持它,您应该改用MutationObserver

【讨论】:

  • 使用DOMSubtreeModified 可能是个坏主意,请参阅stackoverflow.com/a/6659678/733347。不幸的是,它没有跨浏览器实现
  • 我等到有人发布:p 事实是,尽管已被弃用,但在 大多数 浏览器中工作的东西几乎没有替代品(尽管您从 jQuery 发布的链接论坛很有趣,我会尝试一下,谢谢)。
  • @Aravin 你应该改用MutationObserver
【解决方案2】:

这种方式不能监控 DOM 的变化。引用 jQuery 文档:

change 事件在元素值改变时发送到元素。这 事件仅限于元素、框和 元素。 - http://api.jquery.com/change/

如果您希望在 DOM 发生更改时执行代码,您可能需要设置检查 DOM 的间隔或使用 jQuery 论坛上的海报提供的 this technique

DOMSubtreeModified 事件,但在当前浏览器中几乎不可用,所以我个人不推荐使用它。有关详细信息,请参阅this stackoverflow answer

【讨论】:

    【解决方案3】:

    你的语法也错了,伙计!如果您要这样做,请在准备好的文档中进行,.change 非常有限,不会在新页面上触发。

    $(document).ready(function(){
        if($('.classOrId').length){
            //do something if it exists
        };
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多