2009-12-09 23 views
0

的JavaScript,这是我的javascript它的行为就像一个单选框。其中,用户可以选择在同一时间只有1个选项(例如:如果他选择项目1,选择ITEM2然后物品1被取消,他一样选择ITEM2如果他再次点击ITEM2它就会被取消。),它使用户无论选择任何一个项目或取消选择的项目问题中的CheckBoxList

这种情况下正常工作
问题 我在页面的按钮,一旦用户点击该按钮再次,如果用户选择任何项目[例如物品1单击按钮之前选择。然后点击按钮。现在如果我们选择在CheckBoxList的任何项目最初选择的物品1,当我选择另一项目检查boxlist

下面

是没有得到取消是我的代码

var objChkd; 

function HandleOnCheck() 
{ 
    var chkLst = document.getElementById('CheckBoxList1'); 
    if(objChkd && objChkd.checked) 
      objChkd.checked=false;objChkd = event.srcElement; 
} 

并注册客户端事件到“CheckBoxList1 '在Page_load作为

CheckBoxList1.Attributes.Add("onclick","return HandleOnCheck()"); 

in .cs文件我不想这样做CheckBoxList1.clearSelection();

任何帮助将是巨大的

谢谢

+0

这是相当混乱。似乎缺少代码:在哪里声明了objChkd?你为什么要在函数中定义'chkLst',然后不使用它?最重要的是,你为什么不使用实际的单选按钮? – 2009-12-09 09:27:02

+0

可能因为单选按钮不能被取消选中。 – Magnar 2009-12-09 11:39:39

回答

1

你的问题是明确的,但还不够具体。但让我们试着找出解决方案。

在当你尝试检查或取消前一个项目的情况下,我会建议你在“列表项”的类别,而不是在列表本身使用onclick处理。 (想象一下,有人在列表项旁边点击,所以你的状态会不正确);

这也让您在没有浏览器的兼容性,如window.event或事件,或任何根据了自由。你会得到你的节点作为函数的参数。

ListItem1.Attributes.Add("onclick","return HandleOnCheck(this)"); 
ListItem2.Attributes.Add("onclick","return HandleOnCheck(this)"); 

另外,尽量避免使用硬编码ID的内部你HandleOnCheck功能。

接下来,你可以更好地保存功能范围内,而不是外面的项目状态。您可以通过指定参数本身的功能,这样做:

HandleOnCheck.selectedItem = someNode; 

所以,完整的代码是:

function HandleOnCheck(node) { 
    var oldNode = HandleOnCheck.selectedItem; 
    if(oldNode) { 
     oldNode.checked = false; 
    } 

    HandleOnCheck.selectedItem = node; 
} 

而且处理器部分:

ListItem1.Attributes.Add("onclick","return HandleOnCheck(this)"); 
ListItem2.Attributes.Add("onclick","return HandleOnCheck(this)"); 

这应该有助于。