2011-04-13 113 views
9

我在網上搜索,沒有找到一個好的方法來選擇.net 中的radiobuttonlist控件所以我給每個radiobuttonlist添加一個類並使用類選擇器來循環每個,但是,它似乎每當一個變化,所有變化。見我的代碼如下: 這是jQuery的部分:如何在單選按鈕列表中循環

function Checkform() { 
    result=true; 
    $('.rbl').each(function() { 
      var cc = $(this + "[checked]").val(); 
      if (cc == undefined) { 
       result = false; 
       return false; 
      } 
     }); 
     return result; 
    } 

這是網絡的一部分:

<form id="form1" runat="server" onsubmit="return Checkform();"> 
<asp:RadioButtonList ID="RadioButtonList1" class="rbl" runat="server"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
    </asp:RadioButtonList> 

    <asp:RadioButtonList ID="RadioButtonList2" class="rbl" runat="server" 
     RepeatDirection="Horizontal"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
     <asp:ListItem>4</asp:ListItem> 
    </asp:RadioButtonList> 

我想要做的是檢查是否所有RadioButtonList控件都有選擇提交表單之前的價值。但它像一個人選擇了價值一樣工作,無論天氣如何,該功能都會返回真實值。請幫我解決這個問題。先謝謝你。

回答

12

如何:

function Checkform() { 
    var result = true; 
    $('.rbl').each(function() { 
     var checked = $(this).find('input:radio:checked'); 
     if (checked.length == 0) { 
      result = false; 
      return; 
     } 
    }); 
    return result; 
} 

這將檢查每一個組,並確定是否有該組內選擇一個radiobuttom。密鑰爲$(this).find('..'),它返回當前組中所有「checked」單選按鈕,如果沒有選擇任何選項,則返回0;如果選擇了1,則返回1。

+1

你走了!它訣竅!欣賞它! – 2011-04-13 21:44:06

1

是的,你的函數將返回true,因爲它首先假設它的條件是「真」。當它通過「RadioButtonList1」循環並找到一個被選中的控件時(我假設其中一個是默認的),它也會返回true。

試試下面的代碼:

var checkedRadioButtons = $('#form1 .rbl input:checked'); 

這條線將只返回其值來檢查設置的單選按鈕。然後,您可以遍歷這些元素,以獲得更多的信息,如他們的價值:

checkedRadioButtons.each(function(Index){ 
    return $(this).val(); 
}); 
+0

我認爲他正在做一些必要的字段驗證,你必須從每個列表中選擇一些東西。 – R0MANARMY 2011-04-13 21:18:58

+0

是的,你是對的,我正在驗證。 – 2011-04-13 21:24:56

+0

那麼如何確保兩個radiobuttonlist已被選中一個選項? – 2011-04-13 21:28:34

0

這將驗證每個單選按鈕列表有一個檢查項目。所以,如果有2個列表和2個檢查項目,那麼它返回true。

function Checkform() { 
    return $(".rbl :checked").length == $(".rbl:has(:radio)").length 
} 
+0

不幸的是,在他的情況下,有兩個不同的列表與同一類。這會告訴你他們中的任何一個是否有選擇的東西,如果兩者都有選擇的東西則不會。 – R0MANARMY 2011-04-13 21:18:04

+0

我知道,但我沒有得到他從描述中需要的。 – Homer 2011-04-13 21:31:51

+0

我更新了代碼。現在它將驗證所有「rbl」RadioButtonLists都有一個檢查項目。 – Homer 2011-04-13 21:41:27

0

如果我正確理解您的問題,您希望確保每個RadioButtonList都有提交之前選擇的內容。有幾種方法可以實現這一點。

看起來您正在使用WebForms,因此您無需觸摸jQuery,您可以使用RequiredFieldValidator(每個RadioButtonList一個)完成此操作,並且您已完成設置。

如果您想要使用jQuery方式,那麼將您的問題想象爲「是否有任何RadioButtonLists沒有選定項目」。要回答這個問題,你:

  1. 選擇一個具有適當類

  2. 所有單選按鈕獲取名稱的不同列表(因爲這是單選按鈕的分組方式)。有many方法來完成這一點,有些比其他人更容易。您可以使用map實用程序來創建名稱列表(然後你就可以做出不同)

    var all = $.map( 
        $(".rbl input:radio"), 
        function(n, i){ return n.attr("name") } 
    ); 
    
  3. 選擇具有相應類別的所有checked單選按鈕(因爲它是一個單選按鈕列表,你不能有在同一時間超過一個checked元素,使他們將是唯一的)

    var selected = $(".rbl input:radio:checked") 
    
  4. 比較清單,看看他們是相同的尺寸。如果他們是那麼每個列表有一個項目被選中,如果他們不是,那麼至少有一個列表沒有選擇任何項目。您可以使用map實用程序將其變成一個名稱列表,但這不是必需的,因爲您只是比較數組長度。

如果你也想知道單選按鈕列表(S)沒有選擇的值,則需要從步驟3中的陣列上應用的地圖實用程序,然後看哪個名字是在all但不在selected