2014-03-10 4 views
0

Я пытаюсь суммировать коллекцию радио-выборов, используя jQuery.Как выбрать все элементы в массиве имен?

<input name="cost[alpha]" type="radio" > 
<input name="cost[beta]" type="radio"> 
<input name="cost[delta]" type="radio"> 
... 
$('input[name="cost[*]"]').each(function() { 
    ... 
} 

Это не работает, так как он пытается разрешить ввод с именем «cost [*]». В идеале я хотел бы перебрать любой элемент в массиве затрат. Есть ли предпочтительный способ сделать это с помощью jQuery? У меня есть другие элементы в моей форме, которые используют тип радио, поэтому выбор радиостанций вообще не является допустимым вариантом.

ответ

6

Сделать атрибут селектор «starts with» селектор (^=):

$('input[name^="cost"]').each(function() { 
    ... 
}); 

Если вы обнаружите, что у вас есть другие элементы ввода, которые начинаются с «стоимость» или даже «стоимость [», то, возможно, вы хотите подумать об изменении способа запроса элементов. Одним из альтернатив было бы добавление специального имени класса к тем элементам, на которые вы нацеливаетесь, и вообще забыть об их именах. Например:

<input name="cost[alpha]" type="radio" class="form-cost"> 
<input name="cost[beta]" type="radio" class="form-cost"> 
<input name="cost[delta]" type="radio" class="form-cost"> 

И тогда ваш селектор является очень простым и очень целенаправленным:

$('input.form-cost').each(function() { 
    ... 
}); 

Вы можете получить лучшую производительность из просто оборачивать элементы в контейнере с уникальным идентификатором или именем класса и для входных запросов элементов, содержащихся в нем (как это было предложено Allende в комментарии):

<div id="cost-inputs"> 
    <input name="cost[alpha]" type="radio"> 
    <input name="cost[beta]" type="radio"> 
    <input name="cost[delta]" type="radio"> 
</div> 

$('#cost-inputs input').each(function() { 
    ... 
}); 
+0

Черт ты был быстрее меня. haha +1 – DontVoteMeDown

+0

Не могли бы вы рассказать о том, почему использование начала совпадения строк по сравнению с глобусом «вход [имя * =« cost ['] »совпадение, как показано ниже, было бы полезно? Интересно, будет ли этот метод иметь проблему, если бы у меня были другие поля с «стоимостью» в качестве первых четырех символов их имени. –

+1

@Benji: Хорошая точка. Возможно, вы захотите добавить трейлинг «[», чтобы избежать столкновения с другими входами. Если необходимо, вы можете ограничить его, изменив селектор на 'input [type =" radio "] [name^=" cost ["]'. Как правило, алгоритм сравнения «начинается с» быстрее, чем алгоритм «содержит», поэтому я и предложил его. –

2

Попробуйте с contains селектор в JQuery

$("input[name*='cost[']").each(function(){}); 
Смежные вопросы