javascript - 将字符串附加到元素属性的末尾

标签 javascript jquery

我正在尝试创建一个函数,将在数组中添加/删除复选框值。我想从元素的 ID 属性创建数组名称(我不确定这是否是实现的最佳方法)。如果 ID 是“color”,则值将被推送到“colorFilter”;如果 ID 是“size”,则值将被推送到“sizeFilter”。问题是我收到“filterArray.push 不是函数”错误。

var colorFilter = [];
var sizeFilter = [];

$('.filter').each(function () {
    var filterName = $(this).attr("id");
    var filterArray = filterName + "Filter";
    $(this).find('a').on( 'click', function( event ) {

        var $target = $( event.currentTarget );
        var val = $target.attr( 'data-value' );
        var $input = $target.find( 'input' );
        var idx;

        if ( ( idx = filterArray.indexOf( val ) ) > -1 ) {
            filterArray.splice( idx, 1 );
            setTimeout( function() { $input.prop( 'checked', false ) }, 0);
        } else {
            filterArray.push( val );
            setTimeout( function() { $input.prop( 'checked', true ) }, 0);
        }

        getItems();
    });
});
function getItems() {
    $.ajax({
        url: "#",
        type: "GET",
        dataType: "JSON",
        data: {
            'color': colorFilter,
            'size': sizeFilter
        }
    });
}

这是我的 html:

<ul id="color" class="filter">
    <li>
        <a href="#" data-value="red">
            <input type="checkbox"/>Red
        </a>
    </li>
    <li>
        <a href="#" data-value="blue">
            <input type="checkbox"/>Blue
        </a>
    </li>
</ul>

<ul id="size" class="filter">
    <li>
        <a href="#" data-value="10x14">
            <input type="checkbox"/>10x14
        </a>
    </li>
    <li>
        <a href="#" data-value="3x5">
            <input type="checkbox"/>3x5
        </a>
    </li>
</ul>

最佳答案

您需要先创建一个具有所需名称的变量,然后才能访问它

window[filterArray] = new Array(); 然后使用此变量。 你实现它的方式 filterArray 只是一个字符串而不是一个数组 所以你的代码将是

$('.filter').each(function () {
   var filterName = $(this).attr("id");
   var filterArray = filterName + "Filter";
   if(typeof(window[filterArray]) == 'undefined' || window[filterArray] == null)
       window[filterArray] = new Array();
   $(this).find('a').on( 'click', function( event ) {

       var $target = $( event.currentTarget );
       var val = $target.attr( 'data-value' );
       var $input = $target.find( 'input' );
       var idx;

       if ( ( idx = window[filterArray].indexOf( val ) ) > -1 ) {
           window[filterArray].splice( idx, 1 );
           setTimeout( function() { $input.prop( 'checked', false ) }, 0);
       } else {
           window[filterArray].push( val );
           setTimeout( function() { $input.prop( 'checked', true ) }, 0);
       }

   });
});

关于javascript - 将字符串附加到元素属性的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35561747/

相关文章:

IE 9 中的 Javascript 错误

Javascript 链接在 selenium excel vba 中没有响应

javascript - JavaScript 中的创作时与运行时

javascript - 使用折叠映射任意 n 元树

JQuery 表单 ajaxSubmit 不起作用

jquery - 发布动态字段数据返回到 Cakephp 中查看

jquery - 使用 ':active' 选择器后如何防止调用我的 css 动画?

javascript - 如何在回调函数中更新和传递变量

javascript - html 页面中的奇怪链接问题

javascript - Bootstrap 模式 : background jumps to top on toggle