2012-09-28 60 views
2

我有一个带有复选框和几个文本框的ASP.NET页面。ASP:复选框后更改后的值已经通过Javascript更改了值

当用户剔除复选框时,我需要执行一系列检查并通知用户结果。我通过复选框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

是你的工作? –

+0

谢谢Pranay - 周末我远离我的源头,但我会在星期一尝试你的建议,并接受你的答案,如果它解决了我的问题。再次感谢! – Stewart

回答

2

服务器不会覆盖客户端更改。你可以为checkedchange事件写javascript。

你shold做如下,此功能检查并取消复选框,消防服务器端自动回

<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

+0

这个事件触发代码比直接调用__doPostBack更好。 (至少在IE中)。为了帮助未来的搜索者,应该在事件代码中使用'chkdec'而不是'element'。 '元素'会给一个Javascript未定义的错误。这保留了键入的字符,但它确实在文本框上进行了关闭编辑,因此您需要重置焦点(在处理回发时考虑到输入的字符)。 – Stewart

1

您可以使用:

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

我收到JavaScript错误“SCRIPT5007:属性'__postback'为null或未定义,不是函数对象“,这个解决方案需要__postback是__doPostBack而不是它,它会触发。不同于Pranay的回答,这个导致相关文本框中输入的字符消失。 – Stewart

+0

当然,我忘记了功能名称拼写 –

+0

Pranay的答案包含许多不必要的事情,吸引人的是检查浏览类型和上升事件。当事件发生时,doPostBack函数将会调用。为什么你需要不必要的东西? –