2011-07-25 34 views
1

我有一個CheckBoxList,它顯示使用表中數據的複選框列表。使用Javascript或jQuery在CheckBoxList控件中查找特定的CheckListItem

儘管此表中的記錄預計會發生變化,但預計最後一個項目的文本值爲Other並且具有期望值。

如果用戶選擇「其他」,我希望能夠在其中輸入指定的「其他」描述的關聯文本框。我希望能夠在使用Javascript或jQuery的客戶端上執行此操作。

由於是動態創建的ID各列表項是有辦法,我能避免硬編碼一樣的東西:

chkOther =的document.getElementById(「checkListItem12_chkOccupationOther」)

我不知道的jQuery ,但我認爲這個庫可能提供了一個很好的方式來使用匹配的ID掩碼來控制,例如。

對此提出建議?

回答

1

如果您可以保證您的「其他」複選框總是最後您可以使用last selector。 使用複選框列表的ID:

$(document).ready(function() { 
    $("#<%=YourCheckBoxList.ClientID%> input:checkbox:last").click(function(){ 
     if(this.checked) {   
      //Enable Text Box Here 
     }else{ 
      //Disable here 
     } 
    }); 
}); 

編輯:更新,刪除了「本」到jQuery對象的不必要的轉換按照RobG的評論。

+0

是的,這聽起來像它會工作... – ChadD

+0

更新了示例以顯示如何測試單選按鈕是否被選中。 –

+0

請緩存$或刪除它。測試'if(this.checked)' – RobG

1

你可以用普通的JS很容易地做到這一點。我會想你的複選框是一種形式,所以你通過獲取表格,然後添加一個偵聽到最後複選框開始:

function addClick() { 
    var form = document.forms['f0']; 
    var input, inputs = form.getElementsByTagName('input'); 
    var i = inputs.length; 

    while (i--) { 
    input = inputs[i]; 

    if (input.type == 'checkbox') { 
     input.onclick = function() { 
     if (this.checked) { 

      // Do stuff... 
      alert('checked!'); 

     } else { 
      // Put stuff in here if unchecked, probably 
      // want to hide whatever is shown when above 
      // is clicked 
     } 
     } 
     // Going backward, the first checkbox found is the 
     // last one so stop after first one found 
     return; 
    } 
    input = null; 
    } 
} 

然後添加功能底部腳本,使用DOM ready函數或在window.onload。

+1

更有效率我相信只有複選框是表單中的最後一個複選框,而不僅僅是複選框列表中的最後一個複選框時,纔會起作用。取而代之的是抓取表單,試着抓住複選框列表:cbList = document.getElementByID('<%= YourCheckBloxList.ClientID%>'); inputs = cbList.getElementsByTagName('input'); –

+0

我的答案的第一行說「我會猜測你的複選框是在一個表單中」,所以是的,這是爲了表單中的複選框。如果OP想要使用其他基本元素(例如文檔),那也可以。 – RobG

+0

Rob,OP聲明他使用了一個複選框列表的ASP.net web控件。他可能會在複選框列表後面顯示其他複選框。我的評論是涵蓋表格中隨後的任何複選框。在我閱讀它時,您的代碼將始終將偵聽器添加到表單中的最後一個複選框,實際上可能不是所需的複選框。 –

相關問題