在checkboxlist中的javascript中出现问题

时间:2009-12-09 07:40:43

标签: javascript

这是我的Javascript,其行为类似于Radiobutton。用户一次只能选择1个选项(例如:如果他选择item1并选择item2则取消选择item1,作为选择item2,如果他再次点击item2则取消选择。)用户可以选择任何一个项目,也可以取消选择所选项目

此条件正常
问题  如果用户选择任何项目[例如,在单击按钮之前选择了item1,则用户再次单击该按钮时,我会在页面中显示一个按钮。然后单击按钮。现在,如果我们选中复选框列表中的任何项目,当我在复选框列表中选择另一个项目时,未取消选择最初选择的项目

下面是我的代码

var objChkd;

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

并将客户端事件注册到Page_load上的'CheckBoxList1'

CheckBoxList1.Attributes.Add("onclick","return HandleOnCheck()");
<。>在.cs文件中我不想这样做CheckBoxList1.clearSelection();

任何帮助都会很棒

谢谢

1 个答案:

答案 0 :(得分:1)

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

如果您尝试检查或取消选中上一项,我建议您在“ListItem”的类中使用onclick处理程序而不是列表本身。 (想象一下有人点击列表项旁边,所以你的状态不正确);

这也使您可以自由地不再依赖于浏览器兼容性,例如window.event或event,或者其他任何东西。您将获得节点作为函数的参数。

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

另外,尝试在HandleOnCheck函数中消除使用硬编码的id。

接下来,您可以更好地将Item状态保存在函数范围内而不是在其外部。您可以通过为函数本身分配参数来完成此操作,如下所示:

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)");

这应该有所帮助。