JavaScript на jQuery созданном коде никогда не вызывается - PullRequest
0 голосов
/ 23 марта 2010

Это мой взгляд на 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 (фактически пользовательский элемент управления) и добавляет его в div CreateForm. Это на самом деле работает нормально.

Проблема в этом

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

никогда не запускается. Тег fieldset находится в ответе, поэтому вы не видите его здесь, но он есть - все возвращается в порядке (я проверял Firebug).

Почему две вышеупомянутые строки JS никогда не запускаются и не имеют никакого эффекта?

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

При вызове этого кода тег 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 голос
/ 23 марта 2010

Я думаю, что ваша проблема здесь:

$.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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...