1

我正在尝试根据是否选中复选框来设置按钮的启用/禁用。下面是我的 javascript 和 asp 代码,它不起作用。我不确定是否根本没有调用该函数,或者我禁用按钮的方式有问题。

<script type="text/javascript">

function OnChkAgreeChanged(chkAgree) {
    if (document.getElementById"chkAgree").checked)
        document.getElementById("btnSubmit").SetEnabled(true);
    else
        document.getElementById("btnSubmit").SetEnabled(false);
}
</script>


<asp:checkbox ID="chkAgree" runat="server" 
    Text="blablabla" onchange="javascript:OnChkAgreeChanged(this);"/>


<dx:ASPxButton ID="btnSubmit" runat="server" Text="Submit" 
    UseSubmitBehavior="true" AutoPostBack="true" Width="175px" 
    CssClass="submitButton" OnClick="btnSubmit_Click" enabled="false">
</dx:ASPxButton>
4

4 回答 4

1

chkAgree是一个对象而不是一个字符串。您不必使用document.getElementById. 尝试这个...

<script type="text/javascript">

function OnChkAgreeChanged(chkAgree) {
    if (chkAgree.checked)
        document.getElementById("btnSubmit").disabled = null;
    else
        document.getElementById("btnSubmit").disabled = true;
}
</script>

此外,在onchange="javascript:OnChkAgreeChanged(this);"javascript: 中可能不需要。请检查 ASP 文档。

于 2013-07-08T05:23:32.390 回答
1

DevExpress 为其各种控件中的每一个创建一个客户端实例对象。在这种情况下,它将为 btnSubmit 创建一个ASPxClientButton。由于您没有给 btnSubmit 一个 ClientInstanceName,您可以像这样访问它:

window.aspxGetControlCollection().elements['<%= btnSubmit.ClientID %>'];

这意味着您的整个处理程序函数可能看起来像这样:

function OnChkAgreeChanged(chkAgree) 
{
    btnSubmit = window.aspxGetControlCollection().elements['<%= btnSubmit.ClientID %>'];
    if(!(btnSubmit === null || btnSubmit === undefined)) { btnSubmit.SetEnabed(chkAgree.checked); }
}

您还可以通过像这样定义 ClientInstanceName 属性来使您的生活更轻松:

<dx:ASPxButton ID="btnSubmit" ClientInstanceName="btnSubmit" runat="server" Text="Submit" 
    UseSubmitBehavior="true" AutoPostBack="true" Width="175px" 
    CssClass="submitButton" OnClick="btnSubmit_Click" enabled="false">
</dx:ASPxButton>

然后,您可以直接在处理程序中使用它:

function OnChkAgreeChanged(chkAgree) 
{
    if(!(btnSubmit === null || btnSubmit === undefined)) { btnSubmit.SetEnabed(chkAgree.checked); }
}

你会注意到我喜欢检查那个东西是否为空,因为如果你在代码隐藏中将显示设置为无或以其他方式禁用它,很可能 DevExpress 魔法/巫术(选择一个)不会发出创建该实例对象的 JS。

于 2015-05-28T20:34:06.527 回答
0

jQuery解决方案

$(document).ready(function () {
    $('#chkAgree').click(function () {
        if (this.checked) {
            $("#btnSubmit").prop('disabled', false);
        }
        else {
            $("#btnSubmit").prop('disabled', true);
        }
    });
});

或者,如果您想使用 JavaScript 做同样的事情,可以使用 mohkhan 建议的解决方案。

于 2013-07-08T06:04:25.107 回答
0

为此目的使用ClientInstanceNameClientEnabled (不是 Enabled)属性:

function OnChkAgreeChanged(chkAgree) {
    var checked = chkAgree.checked;
    btnSubmit.SetEnabled(checked);
}
</script>


<asp:checkbox ID="chkAgree" runat="server" Text="blablabla" onchange="OnChkAgreeChanged(this);"/>

<dx:ASPxButton ... ClientInstanceName="btnSubmit" ClientEnabled="False">
</dx:ASPxButton>
于 2013-08-20T15:35:35.910 回答