2009-12-09 62 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)"); 

這應該有助於。