[asp.net-mvc]我不能做带 jquery 提交

发布时间: 2017/3/25 19:21:32
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

这是我的页面︰

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="/Scripts/jquery-2.1.3.js"></script>

    <script>
        function DoSubmit() {
            if ($("#noAggLabel")) {
                $("#noAggLabel").innerHTML = "";
            }
            if (this.value) {
                $("#orderForm").submit();
            }
        }
    </script>
</head>
<body>
    <div>

<form action="/Orders/GetXML" id="orderForm" method="post">            <p>
                <select id="OrdersSelect" name="productionOrderId" onchange="DoSubmit();"><option value="">Orders</option>
<option value="1">Order 1</option>
<option value="2">Order 2</option>
<option value="3">Order 3</option>
</select>
            </p>
</form>    </div>
    <div id="codesTable">
    </div>
</body>
</html>

我正在开发一个与.NET Framework 4.5.1 ASP.NET MVC 5 应用程序和 C#。

这是生成的 HTML 视图︰

@model Models.ProductionOrderViewModel

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-2.1.3.js"></script>
    <script>
        function DoSubmit() {
            if ($("#noAggLabel")) {
                $("#noAggLabel").innerHTML = "";
            }
            if (this.value) {
                $("#orderForm").submit();
            }
        }
    </script>
</head>
<body>
    <div>
        @using (@Html.BeginForm("GetXML", "Orders", FormMethod.Post, new { id = "orderForm" }))
        {
            <p>
                @Html.DropDownList("productionOrderId",
                                    new SelectList(Model.ProductionOrders, "Id", "OrderNumber"),
                                    "Orders",
                                    new { id = "OrdersSelect", onchange = "DoSubmit();" })
            </p>
        }
    </div>
    @if (!Model.PagingInfo.HasAggregations)
    {
        <div id="noAggDiv">
            @Html.Label("No tiene agregaciones", new { @id = "noAggLabel" })
        </div> 
    }
    <div id="codesTable">
    </div>
</body>
</html>

为什么我不能做一个提交?更改所选的值,什么也没有发生。

解决方法 1:

这是因为 DoSubmit 函数不调用元素作为上下文。在函数中 this 将引用 window 对象。

当您调用的函数,你可以设置上下文︰

onchange="DoSubmit.call(this);"

如果你将使用 jQuery 而不是该事件绑定 onchange 属性,属性的上下文将能正确︰

$(function(){
  $('#OrdersSelect').change(DoSubmit);
});

便笺︰ 有没有 innerHTML 在 jQuery 的方法,您将使用 texthtml 方法来设置内容。你不需要去检查是否有任何元素第一,是否没有元素,则 jQuery 对象将是空的所以调用 text 上它只是不执行任何操作。

您应该检查值的内容。如果你只是使用它在 if 声明它将被转换为一个布尔值,所以空字符串仍计算为 true

function DoSubmit() {
    $("#noAggLabel").text("");
    if (this.value != "") {
        $("#orderForm").submit();
    }
}
官方微信
官方QQ群
31647020