Нет необходимости использовать forEach()
и добавлять обработчики событий для каждого отдельного выбора. Как для производительности, так и для простоты, лучше просто добавить один обработчик событий, который будет соответствовать каждому select
, и заставить его работать и ориентироваться только на нужные элементы.
Ваш вопрос не определяет его, но из кода кажется, что у вас есть серия этих наборов select
входов, каждый из которых имеет свой $detail->id
. Поскольку ваши select
и скрытые input
, с которыми вы хотите работать, используют это значение идентификатора в их атрибутах HTML ID, мы можем использовать его для выбора нужных элементов.
Вот рабочий JSFiddle .
$(document).ready(function(){
// Handle changes on *every* select on the page
$('select').on('change', function() {
// Find the id of the select that was changed
var id = $(this).attr('id');
// Find the $detail->id of the select that was changed
var detailID = id.replace('qtySelect', '');
// Check the value selected
if ($(this).val() === '+10') {
// Show the input field with the matching $detail->id
$('#qtyInput' + detailID).attr('type', 'number').show().focus();
// Hide the select. If you .remove() it, you can't re-display it
// if the user changes their selection back to 9 for example.
$(this).hide();
}
});
});
Некоторые примечания:
Ваш код использует смесь чистых JS и jQuery. В этом нет ничего технически неправильного, но это, безусловно, затрудняет чтение и поддержку. Если вы собираетесь принять удар, включая jQuery (дополнительный запрос http, дополнительное время загрузки страницы и т. Д. c), и потрудитесь написать некоторый код jQuery, вы можете также использовать его и сделать код проще и более последовательный одновременно *. Ваш JS просто меняет представление, вот для чего CSS.
Аналогичным образом, может быть, лучше просто скрыть выделенное, а не просто remove()
это, но это вероятно, зависит от ваших требований.
Наконец, для дальнейшего использования другим будет легче помочь, если вы сможете попытаться создать минимальный, полный и проверяемый пример . В вашем случае вопрос на 100% о jQuery. Нам не нужно видеть твой Клинок, PHP, Laravel. Все, что нам нужно, это ваш сгенерированный HTML. Точно так же #qtyInput2
не имеет отношения к делу, равно как и cart_detail_id
, а также не относится к refre sh .... Чем проще вы можете сформулировать проблему, тем проще ее прочитать, понять и ответить на нее.