2013-05-15 47 views
0

我有一個從DB填充的CheckBoxList。Javascript和ASP.NET - 管理CheckBoxList

<asp:CheckBoxList ID="chklist1" runat="server" onclick="chklist1_onclick()" /> 

Oce它已被填充我有幾個選項,其中一個有文字「沒有迴應」。

我要的是一個JavaScript函數,執行以下操作:

1)如果我檢查「沒有響應」所有其它選項必須取消選中。 2)如果我至少檢查其中一個不是「無響應」的選項,則必須取消選中「無響應」選項。

希望清楚。提前致謝。

我的嘗試是:

function chklist1_onclick() { 
    var chklist1 = document.getElementById('<%= chklist1.ClientID %>'); 
    var chkList = chklist1.getElementsByTagName("input"); 
    for (var i = 0; i < chkList.length; i++) { 
     if (chkList[i].checked && chkList[i].value == "6") { 
      for (var i = 0; i < chkList.length; i++) { 
       if (chkList[i].checked && chkList[i].value != "6") { 
        chkList[i].checked = false; 

       } 
      } 
     } 
    } 
} 

其中6是 「沒有響應」 項的值。不過這樣一來,我只解決的情況下1)

+1

看看CheckBoxList是如何在HTML中呈現的,那裏有什麼對象/元素,並試試看。請發佈您的代碼嘗試,不要要求爲您編寫完整的代碼。 –

回答

1

假設No Response複選框有value=""你可以試試下面的腳本:

<script type="text/javascript"> 
    window.onload = function() { 
     var noResponseCheckBoxFilter = function(item) { 
      return item.value == ''; 
     }; 
     var otherCheckboxesFilter = function(item) { 
      return !noResponseCheckBoxFilter(item); 
     }; 

     var childInputs = document.getElementById('<%= chklist1.ClientID %>').getElementsByTagName('input'); 
     var checkboxes = Array.prototype.slice.call(childInputs, 0).filter(function (item) { 
      return item.type == 'checkbox'; 
     }); 
     for (var i = 0; i < checkboxes.length; i++) { 
      checkboxes[i].onclick = function() { 
       if (this.value == '') { 
        if (this.checked) { 
         // uncheck the other checkboxes 
         var otherCheckboxes = checkboxes.filter(otherCheckboxesFilter); 
         for (var j = 0; j < otherCheckboxes.length; j++) { 
          otherCheckboxes[j].checked = false; 
         } 
        } 
       } else { 
        // uncheck the No Response checkbox 
        checkboxes.filter(noResponseCheckBoxFilter)[0].checked = false; 
       } 
      }; 
     } 
    }; 
</script> 

如果沒有響應複選框具有不同的值比空字符串簡單地適應在前面的例子中的測試。

+0

嗨達林。謝謝您的回覆。當執行你的代碼時,我會得到下面的異常:「微軟JScript運行時錯誤:預期的JScript對象」在var複選框等。 – lugeno

+0

你能測試一個真正的webbrowser並告訴你在控制檯中得到的確切錯誤信息嗎?通過真正的網頁瀏覽器,我的意思是任何比IE瀏覽器。 –

+0

我只能用IE瀏覽器導致應用程序只能運行它 – lugeno

0

達林解決方案稍微修改後的版本,我認爲這一個是IE8兼容。

var checkBoxList = document.getElementById('<%= chklist1.ClientID %>'); 
var checkboxes = checkBoxList.querySelectorAll('input[type=checkbox]'); 
var nonecheckbox = checkBoxList.querySelectorAll("input[value='6']")[0]; 
var i, j; 
for (i = 0; i < checkboxes.length; ++i) { 
    checkboxes[i].onclick = function() { 
     if (this.value == '6' && this.checked) { 
      // uncheck the other checkboxes 
      for (j = 0; j < checkboxes.length; ++j) { 
       if (checkboxes[j].value != '6') { 
        checkboxes[j].checked = false; 
       } 
      } 
     } else { 
      // uncheck the No Response checkbox 
      nonecheckbox.checked = false; 
     } 
    }; 
} 
0

我解決了用下面的代碼:

window.onload = function() { 
    var chklist1 = document.getElementById('<%= chklist1.ClientID %>'); 
    var chkList = chklist1.getElementsByTagName("input"); 
    for (var i = 0; i < chkList.length; i++) { 
     chkList[i].onclick = function() { 

      if (this.checked) { 
       if (this.value == "6") { 
        for (var i = 0; i < chkList.length; i++) { 
         if (chkList[i].value != "6") { 
          chkList[i].checked = false; 
         } 
        } 
       } 
       else { 
        for (var i = 0; i < chkList.length; i++) { 
         if (chkList[i].value == "6") { 
          chkList[i].checked = false; 
         } 
        } 
       } 
      } 

     }; 
    } 
}; 

,並刪除在asp標籤的onclick事件。