繁体   English   中英

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

[英]JavaScript on jQuery created code never gets called

这是我在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永远不会运行或没有效果?

调用此代码时,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);
            });
        });
    }

我认为您的问题在这里:

$.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循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM