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控件后没有这样的问题)
<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控件后没有这样的问题)
先把这句改为:
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;
}
}
这样可以避免可能的副作用
问题是,你如果点"确定"他会刷新页面下面的代码肯定不回执行,放到一个UpdatePanel控件里面看看(效率有点低)
function CommitCheckBox() {
return window.confirm('ok?');
}