Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JQuery选择器中连接字符串_Jquery_Checkbox_Concatenation - Fatal编程技术网

在JQuery选择器中连接字符串

在JQuery选择器中连接字符串,jquery,checkbox,concatenation,Jquery,Checkbox,Concatenation,我试图将一个变量连接到JQuery选择器中(据我所知,这相当简单),但我遇到了一些有趣的行为。我的代码应该沿y轴取消选中某些无线电选择器 for(var i = 1; i < 5; i++) { $("input[value='"+1+"']").each(function() { //<-- $(this).on('change', function() { var that = this;

我试图将一个变量连接到JQuery选择器中(据我所知,这相当简单),但我遇到了一些有趣的行为。我的代码应该沿y轴取消选中某些无线电选择器

for(var i = 1; i < 5; i++) {
    $("input[value='"+1+"']").each(function() {                     //<--
        $(this).on('change', function() {
            var that = this;
            $("input[value='"+1+"']").each(function() {             //<--
                if($(this).attr('name') != $(that).attr('name')) {
                    $(this).prop('checked', false);
                }
            });
        });
    });
}

我用
I
更改了
1
,现在您的代码如下

for(var i = 1; i < 5; i++) {
    $("input[value='"+i+"']").each(function() {                     //<--
        $(this).on('change', function() {
            var that = this;
            $("input[value='"+i+"']").each(function() {             //<--
                if($(this).attr('name') != $(that).attr('name')) {
                    $(this).prop('checked', false);
                }
            });
        });
    });
}

这是JavaScript中的经典闭包问题。在代码中,将
1
替换为
i
(事件处理程序中的第二个
i
)将不起作用,因为这些事件处理程序维护到
i
变量本身的实际链接,而不是运行代码时保持的
i

解决方案很简单:通过将
i
作为参数传递给函数来打破闭包:

for(var i = 1; i < 5; i++) {
    (function(i){
         $("input[value='"+ i +"']").each(function() {
            $(this).on('change', function() {
                var that = this;
                $("input[value='"+i+"']").each(function() {             //<--
                    if($(this).attr('name') != $(that).attr('name')) {
                        $(this).prop('checked', false);
                    }
                });
            });
         });
    })(i);
}
for(变量i=1;i<5;i++){
(职能(一){
$(“输入[值='”+i+“']”)。每个(函数(){
$(this).on('change',function()){
var=这个;

$(“输入[value=”“+i+”]”)。每个(函数(){//Show related HTML code.radio,unselect???您不能使用一个放射组(即,在无线电上相同的
名称
)?我将它们分组:沿着x轴。这是一个无线电网格,其中每个x轴和y轴都是唯一的。你能详细说明一下吗?仍然令人困惑。你想实现什么?5行5个单选按钮,每个单选值为1-5(用于问卷调查)。每个评分(1-5)在每个选择上都必须是唯一的(例如,选择的同一类型的值不能超过1个)。我已经在使用组(名称)来组织单个选择的单选按钮(沿x轴),因此我必须使用JS来管理值选择(沿y轴)。插入HTML,你会看到的。哇,不可能!就是这样!如果你知道任何好的来源,我会有兴趣多读一点。谢谢!
var names = ["one", "two", "three", "four"];
for (var i=0; i< names.length; i++) {
  $("input[name='"+names[i]+"']").each(function() { 
.............
.............   
for(var i = 1; i < 5; i++) {
    (function(i){
         $("input[value='"+ i +"']").each(function() {
            $(this).on('change', function() {
                var that = this;
                $("input[value='"+i+"']").each(function() {             //<--
                    if($(this).attr('name') != $(that).attr('name')) {
                        $(this).prop('checked', false);
                    }
                });
            });
         });
    })(i);
}