代码之家  ›  专栏  ›  技术社区  ›  mare

jquery上的javascript创建的代码从未被调用

  •  0
  • mare  · 技术社区  · 14 年前

    这是我在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);
                });
    

    从不跑步。这个 字段集 标签在响应中,所以您在这里看不到它,但它在那里-一切都恢复正常(我检查了Firebug)。

    为什么上述两行JS从未运行或有任何效果?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Peter    14 年前

    调用此代码时,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);
                });
            });
        }
    
        2
  •  1
  •   hunter    14 年前

    我认为你的问题在这里:

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