2010-08-24 63 views
1

我想確定最有效的方法(使用jquery或dom)來獲取一組複選框的值,如果您有其中之一。jQuery - 獲取任何一組複選框的選中值

當輸入複選框是表單的一部分時,這應該是通用的。但是,這個X瀏覽器是否安全,如何更有效地做到這一點,以及如果複選框不是表單的一部分呢?

function (domCheckboxElm) { 
    var result = $.map($(domCheckboxElm.form.elements[domCheckboxElm.name]).filter(":checked"), function(e) { 
     return $(e).val(); 
    }); 
    return result; 
} 

編輯:

作爲一個方面說明,性能是非常重要的位置。對於有幾個輸入元素的表單和具有數千個表單的表單,此算法是必需的。我的許多用戶都擁有非常舊的電腦('02,'04,'05)。

+1

聽起來像這樣:http://stackoverflow.com/questions/590018/getting-all-selected-checkboxes-in-an-array – epascarello 2010-08-24 16:26:03

+0

@Vivin:但我沒有得到我正在尋找的答案。我的意思是「不可能因爲......」的答案是可以接受的,我反而採用了一種解決我眼前需要的解決方案。 – 2010-08-24 17:11:46

+0

@epascarello:我同意'$(「input:checkbox [name = type]:checked」)'會解決這個問題,但這是相當可怕的表現!必須查看dom的每個(輸入)元素並找到具有我指定名稱的元素。性能是否真的可以接受大頁面(我需要使用它)? – 2010-08-24 17:23:07

回答

0

我認爲解決的辦法我就必須去與我是同一個後備提出了通用"input:checkbox[name=" + elm.attr("name") + "]"如果元素是不是一種形式的部分之一。

1

首先: Select values of checkbox group with jQuery

性能真的不應該是一個問題,除非你有複選框以十萬計一遍要經過。你最好的選擇將是封裝股利或其他父DOM對象中的複選框,然後可以內的jQuery來限制它的DOM搜索:

HTML

<div id="checkboxDiv"> 
    <input type="checkbox" name="sample" value="isAPerson" />  
    <input type="checkbox" name="sample" value="isADog" /> 
    <input type="checkbox" name="sample" value="isACat" /> 
</div> 

jQuery的

var checkBoxArray=[]; 
$("#checkboxDiv input:checkbox").each(function(){ 
    checkBoxArray.push([$(this).attr("value"),$(this).attr("checked")]); 
}); 

這裏是實際的例子(假設你已經包括jQuery):

<script type="text/javascript"> 

$("#checkboxDiv input:checkbox").click(function(){ 
    var checkBoxArray=[]; 
    $("#checkboxDiv input:checkbox").each(function(){ 
     checkBoxArray.push([$(this).attr("value"),$(this).attr("checked")]); 
    }); 
    $("#disp").empty().append(function(){ 
      var outputStr=""; 
      for (a in checkBoxArray){ 
       outputStr+=checkBoxArray[a][0]+": "+checkBoxArray[a][1]+"<br/>"; 
      } 
      return outputStr; 
     }); 
    }); 
</script> 

然後,在車身:

<div id="checkboxDiv"> 
    <input type="checkbox" name="sample" value="isAPerson" />  
    <input type="checkbox" name="sample" value="isADog" /> 
    <input type="checkbox" name="sample" value="isACat" /> 
</div> 

<div id="disp"></div> 
+0

讓我重新說明問題。我有一個包含數千個複選框的表單。在函數中,我不知道什麼是父容器(或有多高)去獲取複選框的公共父元素,以優化查找。當複選框是表單的一部分時,我在問題中提供的解決方案似乎表現良好,但當它們不在一個表單中時,由於我需要不同的算法(除了通用'輸入:複選框[name = ...] ]')也許這就夠了,通用的東西不是一個形式的孩子,而是一個形式。 – 2010-08-24 20:52:29

+1

那麼,我想你回答了你自己的問題...雖然,而不是試圖寫一些超快速算法來通過每一個複選框,我仍然認爲你會更好地嘗試找到一種方法來找到父元件。 jQuery擁有一個非常強大的事件處理系統,並且通過event.target屬性,您可以輕鬆找出圍繞特定複選框的元素。如果你正在處理數以千計的問題,我認爲你會花費大量的精力來有效地組織它們並重復它們。 – Trafalmadorian 2010-08-25 00:16:59