我正在尝试使用与选中的复选框相关联的标签填充数组(rulesArray)。我还试图确保仅添加唯一值(这是!inArray出现的位置)。我现在很确定这对于inArray是不正确的语法。

目前我的错误是"Uncaught ReferenceError: inArray is not defined."

这是我的JS

$(document).ready(function(){
    var rulesArray = [];
    $('input:checkbox').click(function(){
        $('input.selectBox').each(function(){
            if(($(this).is(':checked')) && (!inArray($(this).parent().text(), rulesArray))){
                rulesArray.push($(this).parent().text());
            }
        });
        console.log(rulesArray);
    });
});


这是我的HTML

<div>
    <button class="toggle_button" data-contents=".item_8"></button>
    <ul class="contents item_8">
        <li><input class="selectBox" type="checkbox" id="color_1" name="color_1" value=""><label for="color_1">Red</label></li>
        <li><input class="selectBox" type="checkbox" id="color_2" name="color_2" value=""><label for="color_2">Orange</label></li>
        <li><input class="selectBox" type="checkbox" id="color_3" name="color_3" value=""><label for="color_3">Yellow</label></li>
        <li><input class="selectBox" type="checkbox" id="color_4" name="color_4" value=""><label for="color_4">Green</label></li>
        <li><input class="selectBox" type="checkbox" id="color_5" name="color_5" value=""><label for="color_5">Blue</label></li>
    </ul>
</div>

最佳答案

正确的方法是$.inArray-不是inArray-您可以使用更好的选择器并使用普通的indexOf调用来缩短代码:

$('input.selectBox').each(function(){
    var isChecked = this.checked;
    var txt = $(this).parent().text();
    var idx = rulesArray.indexOf(txt);

    if (isChecked && idx === -1) {
        rulesArray.push(txt);
    } else if (!isChecked && idx > -1) {
        rulesArray.splice(idx, 1);
    }
});


以及使用$.map的解决方案

var rulesArray = $('input.selectBox:checked').map(function() {
    return $(this).parent().text();
}).get();

关于javascript - 尝试仅将唯一值添加到我的数组,并且未定义“inArray”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38744893/

10-09 14:15