0

我有一个包含多个字段的 ASPX 表单。

选中时有问题的字段(下拉菜单)应该禁用另一个下拉菜单和文本字段,但由于某种原因它不起作用。

我究竟做错了什么?

<td class="td"><asp:DropDownList ID="DeliveryTypeList" runat="server" AutoPostBack="true" onchange="javascript:changeTextFields();"></asp:DropDownList></td>

我拥有的javascript是:

<script type = "text/javascript">
function changeTextFields() {
    var val = document.getElementById("DeliveryTypeList").text;
    if (val == "PO Box 110") {document.getElementById("ReceivedFrom").disabled = false;  document.getElementById("ReferenceNumber").disabled = false }
    if (val == "Courier Delivery") { document.getElementById("ReceivedFrom").disabled = true; document.getElementById("ReferenceNumber").disabled = false }
}

4

3 回答 3

1

您的客户端代码可能没问题,但您的问题出AutoPostback = trueDeliveryTypeList. 此设置导致客户端在选定的索引更改时发布到服务器,因此代码changeTextFields无关紧要。

如果需要AutoPostback = true,则必须在服务器端添加一些额外的逻辑才能在回发时执行客户端代码。

于 2013-03-19T17:06:57.807 回答
0

下拉列表的 id 永远不会相同,因为它是服务器端控件。在 Java Script 中改用类。

查看

下拉选择值更改时隐藏 div

对于类似的问题。

于 2013-03-19T17:11:54.130 回答
0

为了维护客户端状态,您希望在从服务器返回后在页面加载时调用脚本。

由于您使用的是 javascript,因此您可以使用它e.options[e.selectedIndex].value来检索下拉列表的选定值。

我的想法:与 javascript 相比,使用 jQuery 选择 DOM 会容易得多。

<asp:DropDownList ID="DeliveryTypeList" runat="server" 
    AutoPostBack="true" onchange="javascript:changeTextFields();">
    <asp:ListItem Text="PO Box 110" Value="PO Box 110" />
    <asp:ListItem Text="Courier Delivery" Value="Courier Delivery" />
</asp:DropDownList>
<asp:DropDownList ID="ReceivedFrom" runat="server">
</asp:DropDownList>
<asp:TextBox ID="ReferenceNumber" runat="server" />
<script type="text/javascript">
    function changeTextFields() {
        var e = document.getElementById('<%= DeliveryTypeList.ClientID %>');
        var val = e.options[e.selectedIndex].value;
        if (val == "PO Box 110") {
            alert(val);
            document.getElementById('<%= ReceivedFrom.ClientID %>').disabled = false;
            document.getElementById('<%= ReferenceNumber.ClientID %>').disabled = false;
        }
        if (val == "Courier Delivery") {
            alert(val);
            document.getElementById('<%= ReceivedFrom.ClientID %>').disabled = true;
            document.getElementById('<%= ReferenceNumber.ClientID %>').disabled = false;
        }
    }
    // Call at page load
    changeTextFields();
</script>
于 2013-03-19T18:12:41.237 回答