0

我有很多带有类过滤器的输入:

<ul>
<li>
<a><input class="filter" name="filter[manufacturer][]" type="checkbox"> Other (18)</a>
</li>
<li>
<a><input class="filter" name="filter[manufacturer][JOBY]" type="checkbox"> JOBY (2)</a>
</li>
<li>
<a><input class="filter" name="filter[manufacturer][Beurer]" type="checkbox"> Beurer (1)</a>
</li>
<li><a>
<input class="filter" name="filter[manufacturer][Obreey Products]" type="checkbox"> Obreey Products (1)</a>
</li>
</ul>

如果选中输入复选框,我需要使用JavaScriptJQuery循环每个输入调用cl.facetFilter(name, name2)函数

例如,如果复选框名称是filter[manufacturer][JOBY]并且输入被选中,我需要调用

cl.facetFilter('manufacturer', 'JOBY');

如果复选框名称过滤器[制造商][]和输入被选中,我需要调用

cl.facetFilter('manufacturer', '');

感谢帮助

4

5 回答 5

1

你可以做:

$(".filter:checked").each(function() {
    var name = $(".filter").attr("name");
    name = name.split("[");

    name[1] = name[1].substring(0, name[1].length - 1);
    name[2] = name[2].substring(0, name[2].length - 1);

    cl.facetFilter(name[1], name[2]);
});

演示: http: //jsfiddle.net/tymeJV/MfAsA/——我记录了结果,而不是在演示中调用函数。

于 2013-08-29T20:51:36.587 回答
0

最简单的我建议,尽管未经测试:

$('.filter').each(function () {
    var self = this;
    if (self.checked && self.name) {
        var names = self.name.match(/\[(.+)\]/)[1].split('][');
        c1.facetFilter(names[0],names[1]);
    }
});

JS 小提琴演示

请注意,在演示中,我显然使用了不同的函数名称并设置了要检查的复选框(出于演示目的)。

参考:

于 2013-08-29T20:47:40.180 回答
0

这个jQuery应该做你需要的:

$('.filter:checked').each(function(index, elem) {
    elem = $(elem);
    var result = elem.attr('name').match(/\[[a-zA-Z0-9 ]*\]/g);
    if (result.length == 2) { // Sanity check
        cl.facetFilter(result[0], result[1]);
    }
});

选择器的:checked部分应该过滤掉任何未选中的输入框,并且正则表达式匹配应该挑选出两组括号中的值。但是,如果不需要该符号,我会建议使用更简单的格式(例如filter|manufacturer|JOBY),以便您可以在分隔符上执行简单的 .split() 。

于 2013-08-29T20:54:41.073 回答
0

一些棘手的字符串操作,但是当您选中相关框时,这将使用正确的参数调用该函数:

$('.filter').click(function(e){
    if($(this).is(':checked')){
        $name = $(this).attr('name');
        $names = $name.split('[');
        $attr1 = $names[1].replace(']', '');
        $attr2 = $names[2].replace(']', '');
        console.log('cl.facetFilter(\''+$attr1+'\', \'' +$attr2+'\')');
    }
});

如果您正在加载已选中某些框的文档,那么$('.filter:checked').each(function() {...语法将使您到达那里。

JSFiddle 链接

于 2013-08-29T21:03:35.650 回答
0
$("input.filter:checked").each(function() {
    var parts = /\[(.*)\]\[(.*)\]/g.exec(this.name);
    cl.facetFilter(parts[1], parts[2]);
});
于 2013-08-29T22:10:42.840 回答