aspx中
<asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
            <ItemTemplate>
                <table>
                    <tr>
                         <td>
                            <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%#DataBinder.Eval(Container.DataItem, "IsBuyForOpt")%>' AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" /></td>
                     </tr>
              </table>
            </ItemTemplate>
</asp:DataList>cs中
DataList1_ItemDataBound事件
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            CheckBox cb = (CheckBox)e.Item.FindControl("CheckBox1");
            cb.Attributes.Add("onclick", "return confirm('ok?')");
        }
    }
CheckBox1_CheckedChanged事件
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox cb = (CheckBox)sender;
        cb.Enabled = false;
    }
程序运行后,点击CheckBox,弹出了确认框,CheckBox1_CheckedChanged事件却不执行
去掉cb.Attributes.Add("onclick", "return confirm('ok?')");代码 即不添加它的客户端事件,CheckBox1_CheckedChanged事件正确执行。
               请教各位如何解决!!
(线索 1 :把CheckBox控件换成Button控件后没有这样的问题)

解决方案 »

  1.   

    问题出在这里:return confirm('ok?')把return 去掉就好了。当然这样一来这个confirm就失去了意义,解决办法应该有很多,我现在想到一个比较土的,不要笑话:
    先把这句改为:
    cb.Attributes.Add("onclick", "onCheckChanged()");在aspx中添加javascript:
    <script type="text/javascript" >
        function onCheckedChanged()
        {
           var isChecked = document.getElementById('isChecked');
           if (confirm('ok?') == true)
           {
              isChecked.value = "true";
           }
           else
           {
              isChecked.value = "false";
           }
        }
    </script>添加一个控件:
    <asp:HiddenField runat="server" id="isChecked" />服务端代码修改为:
    protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
        { 
            CheckBox cb = (CheckBox)sender; 
            if (isChecked.Value == "true")
            {
                cb.Enabled = false; //你原来的代码
            }
            else
            {//恢复checkbox原来的状态
                if (cb.Checked) 
                    cb.Checked = false;
                else
                    cb.Checked = true;
            }
        } 
      

  2.   

    上面考虑问题不仔细,应该在服务端的程序里再添加一句:isChecked.Value = "";//清空复位或者在页面的Page_Load(asp.net)或者onload事件(javascript)中复位
    这样可以避免可能的副作用
      

  3.   

    cb.Attributes.Add("onclick", "return confirm('ok?')"); 
    问题是,你如果点"确定"他会刷新页面下面的代码肯定不回执行,放到一个UpdatePanel控件里面看看(效率有点低)
      

  4.   

       this.CheckBox1.Attributes.Add("onclick", "javascript:var isok=CommitCheckBox();if(isok==false) return false"); .html中
      function CommitCheckBox() {
              return window.confirm('ok?');
          }
      

  5.   

    问题已经解决,非常感谢chen_ya_ping给出了正解。同时也很感谢hzzasdf热心的出主意和对我这个问题的关注,谢谢你们,辛苦了!!