ASP:更改后的Checkbox Autopostback,当值已通过Javascript更改时

时间:2012-09-28 05:32:56

标签: javascript asp.net checkbox

我有一个带有复选框的ASP.NET页面,上面有几个文本框。

当用户取消选中该复选框时,我需要进行一系列检查并告知用户结果。我通过复选框autopostback属性对回发进行了这些检查:

<asp:CheckBox ID="chkDecision" runat="server" AutoPostBack="true" />

我实现的另一个业务规则是,当未选中复选框并且用户开始键入其中一个文本框时,我必须自动勾选复选框。我这样做是通过Javascript:

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);">

function SelectDecision(e) {
        if (!checkSpecialKeys(e)) {
            var chkDec = $get('<%=chkDecision.ClientID %>');
            if (!chkDec.checked) {
                chkDec.checked = true;
            }                
        }
    }

以上所有工作都很好。

我遇到的这个问题是,当用户开始在框中输入时,复选框会勾选。如果他们然后手动取消勾选该框,则回发不会触发。

据推测,这是因为复选框处于与加载页面时相同的状态,因此某些内部逻辑认为不需要回发。

如何执行上述场景中提到的服务器端检查?

最后确定 感谢下面给出的帮助,我在测试所提供的答案时能够进一步提高自己。我发现我可以在文本框中设置AutoPostBack属性:

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);" AutoPostBack="true"></asp:TextBox>

在我的场景中,虽然实现了与下面相同的功能,但我发现它更有用,因为在完成编辑后会发生回发。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

服务器不会忽略客户端更改。你可以为checkchange事件编写javascript。

你做的如下,这个功能检查并取消选中复选框并激活服务器端autopostback

<script type="text/javascript"> 
        function SelectDecision() { 


            var chkDec = $get('<%=chkDecision.ClientID %>');                  

            //For checking or unchecking the checkbox. 
            if (chkDec .checked) { 
                chkDec .checked = false; 
            } 
            else { 
                chkDec .checked = true; 
            } 


            //For firing the click event. 
            if (document.createEventObject) { 
                // dispatch for IE 
                var evt = document.createEventObject(); 
                return element.fireEvent('on' + 'click', evt) 
            } 
            else { 
                // dispatch for firefox + others 
                var evt = document.createEvent("HTMLEvents"); 
                evt.initEvent('click', true, true); // event type,bubbling,cancelable 
                return !element.dispatchEvent(evt); 
            } 
        } 
    </script>

更多信息:http://forums.asp.net/t/1445241.aspx/1/10

答案 1 :(得分:1)

您可以使用:

function SelectDecision(e) {
    if (!checkSpecialKeys(e)) {
        var chkDec = $get('<%=chkDecision.ClientID %>');
        if (!chkDec.checked) {
            chkDec.checked = true;
            __doPostBack('<%=chkDecision.ClientID %>', '');
        }                
    }
}