この関数は、Select / MultiSelectドロップダウン要素のユーザーエクスペリエンスを複製します-コンテナでチェックされたチェックボックスの値を表示し(チェックされている/チェックされていないときにそれらを追加/削除します)、3つ以上の項目がチェックされている場合は#を表示します選択された値の代わりに選択されます。
これは2つの機能の組み合わせであり、項目がチェックされていない場合、それらは一緒にうまく機能しません(つまり、値は削除されますが、コンマは削除されません。3つ以上の項目が選択されている場合は正しく機能しません)。
配列を使用して値を格納し、項目がオン/オフのときに配列から値を追加/削除した方がはるかに良いと思います。PHPでの方法は知っていますが、Javascriptでは方法がわかりません。このコードは配列を作成するはずですが、それを自分のコードに統合する方法がわかりません。
$('input:checkbox[name="color[]"]:checked').each(function () {
selectedColors.push($(this).val());
});
既存のコード:
JS
$(".dropdown_container ul li").click(function () {
var text = $(this.children[0]).find("input").val();
var text_edited = text.replace(/_/g, " ");
var currentHtml = $(".dropdown_box span").html();
var positionLocation = currentHtml.indexOf(text_edited);
var numberChecked = $('input[name="color[]"]:checked').length;
if (positionLocation < 1) {
if (numberChecked <= 3) {
$(".dropdown_box span").html(currentHtml.replace('Colors', ''));
$(".dropdown_box span").append(', ' + text_edited);
} else {
$(".dropdown_box span").html(currentHtml.replace(currentHtml, numberChecked + " Selected"));
}
} else {
(currentHtmlRevised = currentHtml.replace(text_edited, ""));
$(".dropdown_box span").html(currentHtmlRevised.replace(currentHtml));
}
});
HTML
<div class="dropdown_box"><span>Colors</span></div>
<div class="dropdown_container">
<ul id="select_colors">
<li>
<label><a href="#"><div style="background-color: #ff8c00" class="color" onclick="toggle_colorbox_alt(this);"><div class=CheckMark>✓</div>
<input type="checkbox" name="color[]" value="Black" class="cbx"/>
</div>Black</a></label>
</li>
<!-- More List Items --!>
</ul>
</div>