在循环中使用[i]指向元素会给我无法识别的表达式

Vyt*_*kas 0 javascript jquery loops

不知道如何做到这一点否则......但这就是我想要做的:

我有一系列的收音机盒

<div id="xrowcont_0">
    <input type="radio" name="13_641" value="a" id="13_641_form_a" ><label for="13_641_form_a"><span></span></label>
    <input type="radio" name="13_641" value="b" id="13_641_form_b" checked="checked"><label for="13_641_form_b"><span></span></label>
    <div id="xmod_mach_list_0" style="display:none;">BOO1</div>
</div>

<div id="xrowcont_1">
    <input type="radio" name="13_642" value="a" id="13_642_form_a"><label for="13_642_form_a"><span></span></label>
    <input type="radio" name="13_642" value="b" id="13_642_form_b"><label for="13_642_form_b"><span></span></label>
    <div id="xmod_mach_list_1" style="display:none;">BOO2</div>
</div>

... ++++ 
Run Code Online (Sandbox Code Playgroud)

并且想法是当你在中选择单选框"B"时<div id="xrowcont_0">,它会<div id="xmod_mach_list_1"在每行旁边取消隐藏.

这是js:

可以说我们有13排......

for (var i=0;i<13;i++) {    
    var a1 = "'#xrowcont_" + [i] + " input[type=radio]'";
    var a2 = "'#xrowcont_" + [i] + " input:checked'";

    console.log(a1);
    console.log(a2); // these show up just fine.

    $(a1).on( "click", function() { // but here it breaks.
        var state = $(a2).val();
        if (state == "b") {
            $('#xmod_mach_list_' + [i] ).css('opacity',0).show().animate({ opacity: 1 }, 300);
            console.log("Show Button");

        } else { 
            $('#xmod_mach_list_' + [i] ).animate({ opacity: 0} , 200);
            setTimeout(function () {$('#xmod_mach_list_' + [i] ).hide(); }, 200); 
            console.log("Hide Button");
        };    
    });
}
Run Code Online (Sandbox Code Playgroud)

它给了我Uncaught Error: Syntax error, unrecognized expression: '#xrowcont_0 input[type=radio]',虽然这就是我想要填充的... $(a1).on( "click", function() {...部分等等.

我怎样才能解决这个问题?

Nie*_*sol 5

取下支架.[i]是一个包含i唯一项目的数组.

你还应该注意,由于封闭的魔力,i在一个setTimeout意志中使用会导致问题.考虑像这样形成你的循环:

for(i ......) { (function(i) {
    ...
})(i); }
Run Code Online (Sandbox Code Playgroud)

  • 方括号是不必要的,但不会导致问题.因为它只有一个元素,在数组上调用`.toString()`只会将`i`的值作为字符串返回.问题是它们包含单引号作为其字符串的一部分,它不是有效的jQuery选择器. (2认同)