2012-05-01 39 views
0

在VB.net應用程序,我有定期的ASP控件創建了多個複選框,即<asp:CheckBox ID="cb3" runat="server" Checked="true" />如何設置ASP複選框狀態使用Javascript?

我試圖實施「全選/無」的功能,但我有一些問題。 Javascript不改變Internet Explorer(v9)中複選框的狀態。我試着調試與IE瀏覽器的開發工具和複選框肯定讓他們的checked屬性設置爲true。 (還試圖設置爲 「選中」。)下面是JS:

function setCheckboxes(state) 
{ 
    var inputs = document.getElementsByTagName("input"); 
    for (var i in inputs) 
    { 
     if (inputs[i].type == "checkbox") 
     { 
      // this line is definitely executed on the checkboxes 
      inputs[i].checked = state; 
      // this doesn't work either 
      //inputs[i].checked = (state ? "checked" : ""); 
     } 
    } 
} 

document.getElementById("cbSelectAll").onclick = function() { 
    setCheckboxes(true); 
    return false; 
} 

document.getElementById("cbSelectNone").onclick = function() { 
    setCheckboxes(false); 
    return false; 
} 

的第二個問題,這可能是相關的,發生在Firefox(V11)。上面的JS工作正常,並取消選擇複選框,但是在提交時它們被設置爲它們的初始狀態。通過點擊選擇和取消選擇正常,雖然正常。我該如何解決?

編輯:爲了說清楚,這是特別是.net的問題,而不僅僅是基本的HTML。我用複選框嘗試了一個基本頁面,IE(de)選擇它們就好了。

更新2:包括更多信息,因爲它可能是相關的。我剛查了一些東西,點擊複選框不會出現更改Internet Explorer中的狀態,但在提交其狀態時,已存儲。

我使用Telerik的網格視圖和數據綁定到它。這裏的ASPX代碼:

<telerik:RadGrid ID="gridContacts" runat="server" Skin="Office2007" GridLines="None" AutoGenerateColumns="False"> 
     <MasterTableView> 
      <RowIndicatorColumn> 
       <HeaderStyle Width="20px" /> 
      </RowIndicatorColumn> 
      <ExpandCollapseColumn> 
       <HeaderStyle Width="20px" /> 
      </ExpandCollapseColumn> 
      <Columns> 
       <telerik:GridBoundColumn DataField="id" DataType="System.String" UniqueName="id" Visible="False"> 
        </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="name" DataType="System.String" UniqueName="name" HeaderText="Name"> 
        </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="email" DataType="System.String" UniqueName="email" Visible="False"> 
        </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn DataField="sms" DataType="System.String" UniqueName="sms" Visible="False"> 
        </telerik:GridBoundColumn> 
       <telerik:GridTemplateColumn DataField="useemail" DataType="System.Boolean" UniqueName="useemail" HeaderText="Email"> 
        <ItemTemplate> 
         <asp:CheckBox ID="cbEmail" runat="server" Checked='<%# Eval("useemail") %>' /> 
        </ItemTemplate> 
       </telerik:GridTemplateColumn> 
       <telerik:GridTemplateColumn DataField="usesms" DataType="System.Boolean" UniqueName="usesms" HeaderText="SMS"> 
        <ItemTemplate> 
         <asp:CheckBox ID="cbSMS" runat="server" Checked='<%# Eval("usesms") %>' /> 
        </ItemTemplate> 
       </telerik:GridTemplateColumn> 
      </Columns> 
     </MasterTableView> 
     <FilterMenu EnableTheming="True" Skin="Office2007"> 
      <CollapseAnimation Duration="200" Type="OutQuint" /> 
     </FilterMenu> 
    </telerik:RadGrid> 

對於每個複選框,散發出來的HTML是這樣的:

<input name="ctl00$ContentPlaceHolder1$gridContacts$ctl00$ctl04$cbEmail" 
class="Office2007 input" id="ctl00_ContentPlaceHolder1_gridContacts_ctl00_ctl04_cbEmail" 
type="checkbox" CHECKED="checked" /><label class="Office2007 radfdCheckboxChecked" 
for="ctl00_ContentPlaceHolder1_gridContacts_ctl00_ctl04_cbEmail" unselectable="on">&nbsp;</label> 
+0

我在VS2008中設置了一個項目 - 我沒有這個問題。你的目標版本是什麼?你有任何事件必須檢查這些複選框嗎? – Snuffleupagus

+0

@ user1090190我實際上使用VS2005(版本8.0.50727.867)和.NET版本2.0.50727 SP2。就我所知,在複選框上沒有事件。 – DisgruntledGoat

+0

嗯,我似乎仍不能複製。你可以發佈更多的網頁,或者它是敏感信息嗎?還有其他的東西需要在這裏玩。 – Snuffleupagus

回答

-2

爲被檢查的屬性的值應該是「檢查」,而不是真/假。 Firefox可以處理真/假值,但IE似乎並不喜歡它。

檢查文檔:http://www.w3schools.com/tags/att_input_checked.asp

+0

如果是這樣的話,它爲什麼會返回true/false而不是「checked」/ false? http://jsfiddle.net/tdFcb/ – Snuffleupagus

+1

Downvote爲(一)不讀的問題,因爲我已經嘗試過,和(b)W3Schools的,在互聯網上最嚴重的部位。 – DisgruntledGoat

+0

w3schools通常不是特別準確的「文檔」。 –

0

嘗試檢查了這個提問/回答:

How to implement "select all" check box in HTML?

for循環,他們實現了,你可能要嘗試稍微不同的語法。還有一些很好的例子,我將推薦如何使用jQuery來做到這一點。

+0

該語法在此不適用。我不是試圖將複選框狀態設置爲與另一個複選框相同的狀態。 – DisgruntledGoat

0

不滿,

我認爲這可能有所幫助:在你的setCheckboxes函數中。不知道爲什麼,但複選框似乎行爲不同,然後......好吧,其他的一切。

function setCheckboxes(state) 
{ 
    var inputs = document.getElementsByTagName("input"); 
    for (var i in inputs) 
    { 
     if (inputs[i].type == "checkbox") 
     { 
      if (state == "true"){ 
       inputs[i].disabled=false; 
       inputs[i].parentElement.disabled = false; 
      } else { 
       inputs[i].disabled=true; 
       inputs[i].parentElement.disabled = true; 
      }    
     } 
    } 
} 

希望有所幫助!

-sf