jQuery не удастся выбрать по идентификатору $('#foo[1]')
, так как он включает [
и ]
, поэтому я выбираю первый элемент как $('[id=foo[1]]')
. Затем получить все последующие текстовые поля, затем отфильтровать их, если их атрибут id не соответствует foo[<digits>]
, а затем либо применить то же значение, что и первое, либо очистить их в зависимости от состояния флажка.
пример
$("#same").click(function() {
var first = $('[id=foo[1]]');
var next = first.nextAll(':text').filter(function() {
return /foo\[\d+\]/.test(this.id);
});
if($(this).is(':checked')) {
next.val(first.val());
}
else {
next.val('');
}
});
Хотя это работает, может быть проще добавить классы, такие как first
и rest
, в HTML, что намного упростит задачу.
<input id="same" name="same" type="checkbox" />
<input type="text" id="foo[1]" name="foo[1]" class="first" value="" />
<input type="text" id="foo[2]" name="foo[2]" class="rest" value="" />
<input type="text" id="foo[3]" name="foo[3]" class="rest" value="" />
<input type="text" id="foo[4]" name="foo[4]" class="rest" value="" />
<input type="text" id="foo[5]" name="foo[5]" class="rest" value="" />
Код jQuery упрощается до:
$("#same").click(function() {
if($(this).is(':checked')) {
$('.rest').val($('.first').val());
}
else {
$('.rest').val('');
}
});