JS / JQuery循环复选框和按名称调用函数

时间:2013-08-29 20:39:29

标签: javascript jquery input

我有很多关于过滤器

的输入
<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>

我需要循环每个输入 JavaScript JQuery 调用 cl.facetFilter(name,name2) 功能如果输入复选框 已选中

例如,如果复选框名称为过滤器[制造商] [JOBY] ,输入已选中,则需要调用

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

如果复选框名称过滤[制造商] [] 并且输入已选中,我需要致电

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

感谢您的帮助

5 个答案:

答案 0 :(得分: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/ - 我记录了结果而不是在演示中调用func。

答案 1 :(得分: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 Fiddle demo

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

参考文献:

答案 2 :(得分: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()。

答案 3 :(得分:0)

一些icky字符串操作,但是当你检查相关的方框时,这将调用具有正确参数的函数:

$('.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 link

答案 4 :(得分:0)

$("input.filter:checked").each(function() {
    var parts = /\[(.*)\]\[(.*)\]/g.exec(this.name);
    cl.facetFilter(parts[1], parts[2]);
});