关于jQuery创建的代码的JavaScript永远不会被调用

时间:2010-03-23 15:51:16

标签: javascript jquery asp.net-mvc

这是我在ASP.NET MVC中的观点。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Administration.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="HeadContent" runat="server">
    <script type="text/javascript">

        var ddlContentTypes;

        $(document).ready(function () {
            ddlContentTypes = $("#ContentTypes");
            ddlContentTypes.bind("change", loadCreate);
            loadCreate();
        });

        function loadCreate() {
            var typeId = $("#ContentTypes option:selected").val();
            $.get('~/' + typeId + '/Create', function (data) {
                $("#CreateForm").html(data);
            });
            $("fieldset input").each(function (index, item) {
                $(item).attr("disabled", true);
            });
        }
    </script>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        <%=Resources.Localize.CreateWidget %></h2>
    <p>
        <% Html.RenderPartial("ContentTypeSelector"); %></p>
    <div id="CreateForm">
    </div>
</asp:Content>

如您所见,它加载了一些HTML(实际上是用户控件)并将其添加到CreateForm div中。这实际上很好。

问题是这个

$("fieldset input").each(function (index, item) {
                $(item).attr("disabled", true);
            });

从不运行。 fieldset 标记位于响应中,因此您不会在此处看到它,但它已经存在 - 所有内容都返回正常(我使用Firebug进行了检查)。

为什么以上两行JS从未运行或有任何影响?

2 个答案:

答案 0 :(得分:2)

调用此代码时,fieldset标记不存在。尝试将此代码移动到成功函数的内部,它可能会起作用。

function loadCreate() {
        var typeId = $("#ContentTypes option:selected").val();
        $.get('~/' + typeId + '/Create', function (data) {
            $("#CreateForm").html(data);
            $("fieldset input").each(function (index, item) {
                $(item).attr("disabled", true);
            });
        });
    }

答案 1 :(得分:1)

我认为你的问题在这里:

$.get('~/' + typeId + '/Create', function (data) {
    $("#CreateForm").html(data);
});

应该是:

$.get("<%=ResolveUrl("~/") %>" + typeId + "/Create", function (data) {
    $("#CreateForm").html(data); // thanks Peter
    $("fieldset input").attr("disabled", "disabled"); // thanks Nick
});

这可能会抛出一个js异常而且它永远不会进入fieldset循环。