这是我在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从未运行或有任何影响?
答案 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循环。