【问题标题】:$(document).ready() and partial view load$(document).ready() 和部分视图加载
【发布时间】:2010-04-10 18:35:04
【问题描述】:

我正在使用 Asp.net mvc 和 jquery 开发应用程序。我想对不同视图中的 html 元素使用相同的命名约定(类和 id)。

如果我想异步加载局部视图,则主视图中的 $(document).ready() 代码段将失去其用处,因为 jquery 无法识别任何局部视图的 html 标记和 css 命名。我当然不想为每个视图编写相同的代码。解决这个问题的最佳方法是什么?

【问题讨论】:

  • 我添加了一个适用于事件的解决方案,在大多数情况下,您是否也在运行插件等...如果是的话,您能否包含更多关于您需要在动态加载的文件上运行的内容内容?

标签: jquery asp.net-mvc partial-views


【解决方案1】:

您可以为此使用.live(),例如:

$(".myClass").click(function() { });

变成这样:

$(".myClass").live('click', function() { });

.live() 以不同的方式工作。 .click() 绑定到选择器在运行时匹配的元素,通常是document.ready.live() 工作在 DOM 根,监听冒泡事件,如果冒泡的目标与选择器匹配,则执行处理程序。

【讨论】:

  • 它适用于点击!不同局部视图中的元素使用的插件怎么样?例如,dataTable() jquery 插件必须适用于所有具有 class="grid" 的元素,无论它们来自哪个视图
  • 如果我理解你的问题没问题。您可以在文档中使用 $(".grid").live([eventname], function() {})... 准备将其“绑定”到您使用的任何局部视图中的任何事件。
  • @user252160 - 你如何加载这些$.ajax
  • 问题是我希望我的表格在主页或部分视图时被“网格化”。已加载
  • 如果使用 live 对 gridify-plugin 不起作用,您可以在部分中包含对 gridify 的调用。但是您必须保持点击事件的“实时”。除此之外:live 得到了增强,可以收听更多的事件,并在 1.4 中有一个新的上下文选项。 api.jquery.com/live
【解决方案2】:

我个人只是使​​用我自己的 $.post 包装器加载所有内容,并根据需要在那里初始化内容。这也有助于统一处理错误、等待通知等。

第三方库通常也提供一种预处理 ajax 加载内容的方法。

局部视图不会调用 document.ready,但它们会评估 head 中 script 标签内的脚本,因此您可以强制调用局部视图特定脚本。

我使用的另一种方法是在表单上自定义 html 标签。例如

<form custom-setup="MyCustomSetupFunc">

我的 $.post 处理程序将检查这个标签并调用这个函数,传递表单实例。这有助于在加载部分时缩小脚本的范围(当可以在同一页面上加载多个部分实例时很有用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2014-04-20
    • 2010-09-19
    相关资源
    最近更新 更多