#jquery #tailwind-css
Вопрос:
У меня есть 3 поля выбора, все они имеют один и тот же класс. В поле выбора, которое я пытаюсь сделать, если выбран первый элемент, цвет текста должен быть серым, если выбраны остальные, цвет текста должен быть белым.
Я пробовал это с помощью jquery и tailwindcss.
МОЙ HTML-КОД :
<div class="text-white grid grid-cols-2 px-4 gap-4">
<select class="focus:outline-none focus:ring-0 border-gray-500 rounded-md bg-transparent first-child-gray-select text-gray-500" required>
<option value="" class="bg-primary text-gray-500" disabled hidden selected>Ülke...</option>
<option value="tr" class="bg-primary text-white">Türkiye</option>
<option value="tr" class="bg-primary text-white">Türkiye</option>
<option value="tr" class="bg-primary text-white">Türkiye</option>
<option value="tr" class="bg-primary text-white">Türkiye</option>
<option value="tr" class="bg-primary text-white">Türkiye</option>
<option value="tr" class="bg-primary text-white">Türkiye</option>
<option value="tr" class="bg-primary text-white">Türkiye</option>
</select>
<select class="focus:outline-none focus:ring-0 border-gray-500 rounded-md bg-transparent first-child-gray-select text-gray-500" required>
<option value="" class="bg-primary text-gray-500" disabled hidden selected>Şehir...</option>
<option value="tr" class="bg-primary text-white">Bursa</option>
<option value="tr" class="bg-primary text-white">Bursa</option>
<option value="tr" class="bg-primary text-white">Bursa</option>
<option value="tr" class="bg-primary text-white">Bursa</option>
<option value="tr" class="bg-primary text-white">Bursa</option>
<option value="tr" class="bg-primary text-white">Bursa</option>
<option value="tr" class="bg-primary text-white">Bursa</option>
</select>
<select class="focus:outline-none focus:ring-0 border-gray-500 rounded-md bg-transparent first-child-gray-select text-gray-500" required>
<option value="" class="bg-primary text-gray-500" disabled hidden selected>İlçe...</option>
<option value="tr" class="bg-primary text-white">İznik</option>
<option value="tr" class="bg-primary text-white">İznik</option>
<option value="tr" class="bg-primary text-white">İznik</option>
<option value="tr" class="bg-primary text-white">İznik</option>
<option value="tr" class="bg-primary text-white">İznik</option>
<option value="tr" class="bg-primary text-white">İznik</option>
<option value="tr" class="bg-primary text-white">İznik</option>
</select>
</div>
МОЙ КОД CSS :
[hidden] {
display: none;
}
МОЙ JS-КОД: (JQUERY)
$(".first-child-gray-select").each((select) => {
$(select).on("change", function () {
console.log("sea");
if ($(select "option:selected").hasClass("text-white")) {
$(select).removeClass("text-gray-500");
$(select).addClass("text-white");
}
});
});
Когда я редактирую код таким образом, когда я выбираю опцию, он меняет цвет всех полей выбора.
$(".first-child-gray-select").change(function () {
if ($(".first-child-gray-select option:selected").hasClass("text-white")) {
$(".first-child-gray-select").removeClass("text-gray-500");
$(".first-child-gray-select").addClass("text-white");
}
});
Ответ №1:
Если вы не слишком привязаны к jQuery, я хотел бы предложить это решение с помощью AlpineJS. AlpnineJS — это облегченный фреймворк утилиты Javascript, который часто называют попутным ветром для JS. Для достижения «простых» результатов, подобных этому, он отлично работает.
Предлагаемое ниже решение основано на двух функциях AlpineJS: x-model
и x-bind
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">
<script src="//unpkg.com/alpinejs" defer></script>
</head>
<body>
<div class="p-4">
<div x-data="{
select1: 's1_A',
select2: 's2_A',
select3: 's3_A',
}">
<select name="s1" id="id_s1" class="border-2 p-4 rounded-xl" x-model="select1" :class="select1 == 's1_A' ? 'text-blue-800' : 'text-gray-800'">
<option value="s1_A" class="text-gray-800">Select 1: Option 1</option>
<option value="s1_B" class="text-gray-800">Select 1: Option 2</option>
<option value="s1_C" class="text-gray-800">Select 1: Option 3</option>
</select>
<select name="s2" id="id_s2" class="mt-4 border-2 p-4 rounded-xl" x-model="select2" :class="select2 == 's2_A' ? 'text-blue-800' : 'text-gray-800'">
<option value="s2_A" class="text-gray-800">Select 2: Option 1</option>
<option value="s2_B" class="text-gray-800">Select 2: Option 2</option>
<option value="s2_C" class="text-gray-800">Select 2: Option 3</option>
</select>
<select name="s3" id="id_s3" class="mt-4 border-2 p-4 rounded-xl" x-model="select3" :class="select3 == 's3_A' ? 'text-blue-800' : 'text-gray-800'">
<option value="s3_A" class="text-gray-800">Select 3: Option 1</option>
<option value="s3_B" class="text-gray-800">Select 3: Option 2</option>
<option value="s3_C" class="text-gray-800">Select 3: Option 3</option>
</select>
</div>
</div>
</body>
Я реализовал решение, в котором текст синего цвета, когда выбран первый вариант, и серый в противном случае, поиграйте с классами tailwindcss, чтобы он соответствовал вашим потребностям 🙂
Комментарии:
1. Большое вам спасибо за ваш ответ. Я использую alpine.js во многих местах моего проекта, как я мог не подумать об этом 🙂