$("#qty")
будет идентифицировать только первый элемент с этим идентификатором. Так что он просто не обрабатывает события ни на одном из других. Наличие нескольких элементов с одинаковым идентификатором недопустимо в HTML - в конце концов, если идентификатор не идентифицирует что-то однозначно, то по определению это не идентификатор! Так что JavaScript / jQuery будет просто игнорировать любые дубликаты после первого. У вас будет такая же проблема и с $( '#myForm' )
.
Вам необходимо использовать класс для определения <select>
, а затем пройти DOM, чтобы найти родительскую форму:
<form>
<input type="hidden" name="hidden_id" value="<?php echo $values["item_id"];?>">
<select name="qty" class="qty" class="form-control">
<option style="display:none;" selected><?php echo $values["item_quantity"];?></option>
<?php
for($i=1; $i<=$values["item_qty"]; $i++)
{
?>
<option value="<?php echo $i;?>"><?php echo $i;?></option>
<?php
}
?>
</select>
</form>
... и ...
$(".qty").change(function(){
var url = "<?php echo URLROOT; ?>"
var form = $(this).closest("form").serialize();
$.ajax({
type: "POST",
url: url + '/shops/cookiesave',
data: form,
beforeSend: function() {
//do something here like load a loading spinner etc.
},
})
.done(function() {
window.location.reload(true);
})
});
N.B. Точно так же, как точка дизайна ... Я отмечаю, что вы перезагрузите страницу, как только AJAX завершит работу. Смысл AJAX в том, чтобы позволить вам оставаться на одной странице без перезагрузки. Чтобы избежать этого ненужного дублирования HTTP-запросов, вы можете либо
a) забудьте об использовании AJAX для этого и просто выполните обычную обратную передачу для обновления количества, или
b) когда AJAX завершит работу, используйте немного JavaScript только для того, чтобы вместо этого обновить клиентскую часть cookie.