0

当用户单击登录按钮时,我有以下代码将登录页面加载到我的单页网站中。在这种情况下,href 调用一个 MVC4 控制器,它返回一个带有 HTML 的局部视图。

$('#loginLink')
   .click(function () {
      var $link = $(this);
      var href = $link.attr('data-href');
      $('#article').load(href);
   }
   return false;
});

但我还需要从服务器加载一些额外的 Javascript。有人可以告诉我如何在页面加载时做到这一点。而不是在我所有的 javascript 都加载到浏览器中时开始。

这是登录页面的 MVC4 代码:

@model WebUx.Models.LoginModel

<section id="content" class="grid_9">
    ........
</section>

@Scripts.Render("~/bundles/jqueryval")

这是 javascript 包的 C# 代码:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.unobtrusive*",
            "~/Scripts/jquery.validate*"));

即使脚本呈现,当我使用 chrome 开发人员工具检查时,它们似乎也没有添加到网页中。理想情况下,我不希望他们内联。我希望它们作为普通 js 加载,浏览器可以检查其 js 缓存。

4

2 回答 2

1

脚本实际上是添加的。在您的特定情况下,您正在添加 jquery 不显眼的验证脚本,我猜它们对您不起作用,因为$.validator.unobtrusive.parse一旦将新内容注入 DOM,您就没有调用该方法:

因此,请确保您已使用不显眼的验证框架将所有新添加的元素注册到 DOM:

$('#loginLink').click(function () {
    var $link = $(this);
    var href = $link.attr('data-href');
    $('#article').load(href, function() {
        $('form').removeData('validator');
        $('form').removeData('unobtrusiveValidation');
        $.validator.unobtrusive.parse('form');
    });
    return false;
});
于 2012-12-30T13:10:21.223 回答
0

要执行您使用 ajax 加载的代码,您可以使用该代码创建一个新标签,并将其添加到页面中。例如 :

    $("#article").append("<script type='text/javascript' src='script.js'></script>");

应该执行“script.js”的内容(前提是页面中有一个id为“#article”的元素)。在 IE 中,必须在您希望脚本运行时将标签添加到页面(您不能只在脚本标签上使用 .load)。

于 2012-12-30T13:33:52.573 回答