【问题标题】:JavaScript on jQuery created code never gets calledjQuery 创建的代码上的 JavaScript 永远不会被调用
【发布时间】:2010-03-23 15:51:15
【问题描述】:

这是我在 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一直没有运行或者没有任何效果?

【问题讨论】:

  • 很难说没有看到呈现的 HTML。你能补充一下吗?
  • 您有多个问题需要处理。结合你到目前为止得到的两个答案,你将朝着正确的方向前进。

标签: javascript jquery asp.net-mvc


【解决方案1】:

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

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);
            });
        });
    }

【讨论】:

  • 如果您和 Hunter 结合您的答案,您可能会开始解决 OP 代码的多个问题。
  • 您可以跳过使用each(...) 函数,只需将attr(...) 应用于选择器以获得更简洁的代码。
【解决方案2】:

我认为你的问题在这里:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多