2014-09-06 1 views
1

Мой код:JQuery получить только первое значение идентификатора из цикла

<input id='edit' type='checkbox' /> 

while($rs = mysql_fetch_array($query_fetch)) 
    {   
     echo "  
     <input type='text' name='qty' id='qty' value='".$sum[0]."' disabled> 
     "; 
    } 

<script> 
document.getElementById('edit').onchange = function() { 
    document.getElementById('qty').disabled = !this.checked; 
}; 
</script> 

Проблема заключается в том, что, когда установите флажок только первая строка из цикла осуществляется. Я хочу, когда флажок установлен, чтобы все входные данные были включены.

+1

кажется вы производите дублируетесь ids, помните, что идентификаторы должны быть уникальными! –

+0

Я пытаюсь изменить это: 'document.getElementById ('qty'). Disabled =! This.checked;' to 'document.getElementByTagName ('input'). Disabled =! This.checked;' но также не работает. –

ответ

1

Чтобы сделать это в JQuery, изменение:

<input type='text' name='qty' id='qty' value='".$sum[0]."' disabled> 

Кому:

<input type='text' name='qty' class='qty' value='".$sum[0]."' disabled> 

И добавьте следующий код:

$('#edit').click(function() { 
    if ($(this).prop('checked')) { 
     $('.qty').prop('disabled', false); 
    } else { 
     $('.qty').prop('disabled', true); 
    } 
}); 

Примечание: идентификаторы объектов DOM должны быть уникальными. Ни один из двух элементов не должен иметь одинаковый идентификатор. Вы можете назначить один и тот же класс нескольким элементам и идентифицировать их в javascript таким образом. Кроме того, если эти элементы input являются элементами формы, которые вы планируете обрабатывать на стороне сервера, вам нужно будет назвать их по-другому или будет доступно только последнее назначенное значение.

+0

Эта работа. Когда флажок установлен, все входы включены, но после снятия флажка они остаются включенными. –

+0

Легко справляется. См. Обновленный ответ. –

+0

Да, я делаю это в одиночку :), спасибо большое за ответ! –

0

Чтобы сделать это в JQuery: запись класса

добавить в текстовые поля:

<input type='text' class='qty' name='qty' id='qty' value='".$sum[0]."' disabled> 

, а затем использовать JQuery

$("#edit").click(function() { 
    $(".qty").each(function(index) { 
      if ($("#edit").is(':checked')) { 
       $(this).prop('disabled', false); 
      } else { 
       $(this).prop('disabled', true); 
      } 
    }); 
}); 
+0

Я не уверен, как хорошо это сработает. Как отмечено в одном из комментариев, все флажки называются 'qty' – Machavity

+0

Фактически #qty являются текстовыми полями, и он хочет включить/отключить все текстовые поля #qty, когда он проверяет/отменяет отметку #edit checkbox –

+0

Также выполняется только для первого строка в цикле. –

0

Первое, что вы не используете id для такого количества элементов ... id уникален для каждого элемента ... здесь вы можете использовать класс = qty.

вы можете получить значение класса с помощью Jquery

$('.qty').eq(0).val(); 

еще, если вы хотите использовать идентификатор, то вы можете сцепить любой встречные переменный (I) к идентификатору

echo "  
    <input type='text' name='qty"+i+"' id='qty' value='".$sum[0]."' disabled> 
    "; 
+0

Извините, я не специалист по jquery и не очень хорошо вас понимаю. Я положил класс на входной элемент, тогда где нужно положить '$ ('. Qty'). Eq (0) .val();' –

+0

$ ('. Qty') означает, что он выбирает все элементы в массив, как имеющие класс qty и .eq (0) используется для доступа к этому элементу местоположения массива ... –

Смежные вопросы