我有一个带有复选框的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>
在我的场景中,虽然实现了与下面相同的功能,但我发现它更有用,因为在完成编辑后会发生回发。谢谢你的帮助!
答案 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>
答案 1 :(得分:1)
您可以使用:
function SelectDecision(e) {
if (!checkSpecialKeys(e)) {
var chkDec = $get('<%=chkDecision.ClientID %>');
if (!chkDec.checked) {
chkDec.checked = true;
__doPostBack('<%=chkDecision.ClientID %>', '');
}
}
}