我有一个CheckBoxList,我想在第二个ListItem(LOCKED)上添加一个确认框。我的意思是,如果选择的项目是“已锁定”,则显示确认框,在另一种情况下不显示“。
这是myCheckBoxList
<asp:CheckBoxList runat="server" AutoPostBack="True" ID="cblFlags" onselectedindexchanged="cblFlags_SelectedIndexChanged">
<asp:ListItem Text="VALID" Value="ISVALID"></asp:ListItem>
<asp:ListItem Text="LOCKED" Value="ISLOCKED"></asp:ListItem>
</asp:CheckBoxList>
这是我的代码
protected void cblFlags_SelectedIndexChanged(object sender, EventArgs e)
{
var selectedItems = cblFlags.Items.Cast<ListItem>().Where(x => x.Selected);
foreach (ListItem selectedItem in selectedItems)
{
if(selectedItem.Value == "ISLOCKED")
cblFlags.Attributes.Add("onclick", "if (!confirm('Are you sure ?')) return false;");
}
}
问题是每次确认框都会显示 - 当我选中并取消选中任何checkboxList项时。
有没有人有想法如何修复它?
提前致谢
答案 0 :(得分:1)
将onclick
事件绑定在ListItem selectedItem
而不是cblFlags
,即CheckBoxList
foreach (ListItem selectedItem in cblFlags.Items)
{
if(selectedItem.Value == "ISLOCKED")
selectedItem.Attributes.Add("onclick", "if (!confirm('Are you sure ?')) return false;");
}
修改强>
我认为您需要使用cblFlags.Items
代替selectedItems
来更改循环,因为您只能将javascript事件绑定到选定的元素一旦您取消选中该复选框,之后在回发事件不会再次绑定,因为执行不会进入foreach
循环。检查我的更新代码,就我的理解而言,它对我有用。