Мне нужно ограничить выбор флажка в нескольких разделах на одной странице. Поэтому я думаю, что лучший способ избежать конфликтов во входных данных из разных разделов — это использовать селектор меток <label data-addon-name = "xxx">
в качестве разделителя, поскольку HTML-код уже имеет разные метки для каждого раздела перед входными данными, например: <label data-addon-name = "Opções">
, <label data-addon-name = "Carnes">
и так далее. Кроме того, каждый из них должен иметь разные ограничения флажка.
У меня есть следующий HTML-код:
HTML
<div class = "wc-pao-addon-container wc-pao-addon wc-pao-addon-opcoes" data-product-name = "Marmitex">
<label for = "addon-3913-opcoes-0" class = "wc-pao-addon-name" data-addon-name = "Opções" data-has-per-person-pricing = "" data-has-per-block-pricing = "">Opções </label>
<div class = "wc-pao-addon-description"><p>Escolha no máximo 5</p>
</div>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-0">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "arroz" data-label = "Arroz"> Arroz </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-1">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "feijao-caldo" data-label = "Feijão Caldo"> Feijão Caldo </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-2">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "feijao-farofa" data-label = "Feijão Farofa"> Feijão Farofa </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-3">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "macarrao" data-label = "Macarrão"> Macarrão </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-4">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "vinagrete" data-label = "Vinagrete"> Vinagrete </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-5">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "pure" data-label = "Purê"> Purê </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-6">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "salada-de-alface" data-label = "Salada de Alface"> Salada de Alface </label>
</p>
<div class = "clear"></div>
</div>
<div class = "wc-pao-addon-container wc-pao-addon wc-pao-addon-carnes" data-product-name = "Marmitex">
<label for = "addon-3913-carnes-1" class = "wc-pao-addon-name" data-addon-name = "Carnes" data-has-per-person-pricing = "" data-has-per-block-pricing = "">Carnes </label>
<div class = "wc-pao-addon-description"><p>Escolha no máximo 3</p>
</div>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-carnes-1-0">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-carnes-1[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "carne-assada" data-label = "Carne Assada"> Carne Assada </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-carnes-1-1">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-carnes-1[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "carne-cozida" data-label = "Carne Cozida"> Carne Cozida </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-carnes-1-2">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-carnes-1[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "frango-assado" data-label = "Frango Assado"> Frango Assado </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-carnes-1-3">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-carnes-1[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "frango-cozido" data-label = "Frango Cozido"> Frango Cozido </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-carnes-1-4">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-carnes-1[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "frango-frito" data-label = "Frango Frito"> Frango Frito </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-carnes-1-5">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-carnes-1[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "calabresa-assada" data-label = "Calabresa Assada"> Calabresa Assada </label>
</p>
<div class = "clear"></div>
</div>
<input name = "add-to-cart" type = "hidden" value = "3913"></form>
СЦЕНАРИЙ
$("[data-addon-name='Opções'] > input").change(function() {
var max = 2;
if ($("[data-addon-name='Opções'] > input:checked").length == max) {
$("[data-addon-name='Opções'] > input").attr('disabled', 'disabled');
$("[data-addon-name='Opções'] > input:checked").removeAttr('disabled');
} else {
$("[data-addon-name='Opções'] > input").removeAttr('disabled');
}
});
Еще одна попытка, которую я предпринял, — это использование input[name=addon-3913-opcoes-0[]] ...
, так как имя одинаково для всех селекторов, но оно возвращается с ошибкой на консоли. Я не знаю, что означает []
в конце имени ввода, я думаю, что это массив, но понятия не имею, как с этим работать. Я предпочитаю первый вариант, используя родительский селектор, чтобы упростить обслуживание кода, но я также хотел бы знать, как заставить скрипт работать с []
.
Большое спасибо!
🤔 А знаете ли вы, что...
JavaScript можно использовать для создания видеоигр, как 2D, так и 3D, с использованием библиотеки Three.js.
Ваш html имеет только один элемент метки с атрибутом данных data-addon-name, только один, и у него вообще нет потомков, не говоря уже о потомке элемента ввода. Поэтому ваш JS не имеет смысла. Может быть, следующий JS имеет смысл:
$("div:has([data-addon-name='Opções']) input").change(function() {
var max = 2;
if ($("div:has([data-addon-name='Opções']) input:checked").length == max) {
$("div:has([data-addon-name='Opções']) input").attr('disabled', 'disabled');
$("div:has([data-addon-name='Opções']) input:checked").removeAttr('disabled');
} else {
$("div:has([data-addon-name='Opções']) input").removeAttr('disabled');
}
});
var max = 2;
var $inputs = $("div:has([data-addon-name='Opções']) input");
$inputs.change(function() {
if ($inputs.filter(':checked').length == max) {
$inputs.attr('disabled', 'disabled');
$inputs.filter(':checked').removeAttr('disabled');
} else {
$inputs.removeAttr('disabled');
}
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "wc-pao-addon-container wc-pao-addon wc-pao-addon-opcoes" data-product-name = "Marmitex">
<label for = "addon-3913-opcoes-0" class = "wc-pao-addon-name" data-addon-name = "Opções" data-has-per-person-pricing = "" data-has-per-block-pricing = "">Opções </label>
<div class = "wc-pao-addon-description">
<p>Escolha no máximo 5</p>
</div>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-0">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "arroz" data-label = "Arroz"> Arroz </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-1">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "feijao-caldo" data-label = "Feijão Caldo"> Feijão Caldo </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-2">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "feijao-farofa" data-label = "Feijão Farofa"> Feijão Farofa </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-3">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "macarrao" data-label = "Macarrão"> Macarrão </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-4">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "vinagrete" data-label = "Vinagrete"> Vinagrete </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-5">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "pure" data-label = "Purê"> Purê </label>
</p>
<p class = "form-row form-row-wide wc-pao-addon-wrap wc-pao-addon-3913-opcoes-0-6">
<label><input type = "checkbox" class = "wc-pao-addon-field wc-pao-addon-checkbox" name = "addon-3913-opcoes-0[]" data-raw-price = "" data-price = "" data-price-type = "quantity_based" value = "salada-de-alface" data-label = "Salada de Alface"> Salada de Alface </label>
</p>
<div class = "clear"></div>
</div>