在JQuery选择器中连接字符串
我试图将一个变量连接到JQuery选择器中(据我所知,这相当简单),但我遇到了一些有趣的行为。我的代码应该沿y轴取消选中某些无线电选择器在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;
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);
}