【问题标题】:jQuery each function not firing with MVC Razor syntaxjQuery 每个函数不使用 MVC Razor 语法触发
【发布时间】:2013-09-14 10:42:53
【问题描述】:

Razor 语法相当新,但我在 Razor 视图上有一些 jQuery 代码,如下所示:-

@section Scripts {

<script type="text/javascript">

    $(document).ready(function () {

        console.log('test1');

        var test = $('#4-10-documentation');

        console.log(test);

        $('#4-10-documentation').each(function () {

            console.log('test2');

        });

        console.log('test3');

    });

</script>

}

firebug 控制台输出:

test1

Object[]

test3

所以 jQuery 在直接指定时可以轻松找到第一个对象,但由于某种原因,.each 函数根本不会触发。有什么原因吗?

别担心,这里的代码是真实代码的简化版本,我使用的是类选择器而不是这里显示的 id 选择器。

注意:- 原来元素来自通过 ajax 加载的局部视图,因此 document.ready() 中不存在元素 id

感谢大家帮助我。

【问题讨论】:

  • $('#4-10-documentation').each --> 为什么? id 必须是唯一的。
  • @TusharGupta OP 提到他没有在“真实”代码中使用 id。
  • 如果您使用类选择器,那么这对我来说很好。它正在创建一个对象数组,这是预期的结果,对吧?
  • @Jeevan Jose - 写入控制台的对象来自第一个选择器(var test ...)

标签: jquery asp.net-mvc razor


【解决方案1】:

当您尝试匹配选择器时,jQuery 将始终返回一个对象——无论找到的 DOM 元素是否与您的选择器匹配。这就是您在 console.log 时看到输出 Object[] 的原因。

如果您使用的是 Firebug,我会检查您的 HTML 以查看您尝试使用 jQuery 循环的 DOM 元素是否实际上在呈现的 HTML 中。您还可以使用 $("#4-10-documentation").length() 轻松检查 jQuery 是否找到任何与您的选择器匹配的 DOM 元素

如果length() 方法的结果为0,那么这就是你的.each() 回调没有被调用的原因。

【讨论】:

  • @Roger Pennink - 是的,你是对的。长度为 0。原来元素是通过 ajax 加载的,这就是为什么在 document.ready() 中找不到它的原因
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 2014-12-02
  • 2011-10-10
  • 2012-06-28
  • 2012-01-17
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多