2011-11-03 139 views
1

每个复选框,我检查删除某个值,我填充它的输入是id添加和文本字段

现在,我怎样才能检索id,我把里面输入,如果用户取消选中该复选框?

EXP:

房地产SCSP被检查;

input收到SC,在该格式SP值= SC,SP

但用户取消选中与SC值的复选框,然后SC应该从输入移除。

这是我正在做的填充与复选框的输入。

var separador = ","; 
var estadosS = ""; 
$(".checkboxEstados").live("click", function(){ 
    if($(this).is(":checked")){ 
     estadosS += (estadosS == "") ? "" : separador; 
     estadosS += $(this).attr("id"); 
     $("#holdEstados").val(estadosS); 
    }else{ 
     // now i'm just cleaning all the input, 
     // but i need to clean only the checkbox that was unchecked 
     $("#holdEstados").val(""); 
    } 
}); 

不知道我是否清楚,任何问题,是我的客人。

谢谢。

回答

0

你是逻辑可以大大简化。只要抓住被检查click事件触发时,每个复选框:

$(".checkboxEstados").live("click", function() { 
    var aryIds = new Array(); 

    $(".checkboxEstados:checked").each(function() { 
     aryIds.push($(this).attr("id")); 
    }); 

    $("#holdEstados").val(aryIds.toString()); 
}); 

这里的a working fiddle

+0

@Downvoter,请问为什么? –

1

解决这个问题的简单方法是避免分析和删除部分数据。而不是试图删除“SC”,而是每次选中任何复选框时重新生成文本字段的全部内容。

当检测到复选框单击事件时,删除文本输入字段的内容,扫描所有选中的复选框,并将其ID添加到文本输入字段中。

+0

这是迄今为止最好的方式(除非你有数千个可能有点慢的复选框),否则你会陷入一些令人讨厌的字符串操作,否则 – WickyNilliams

+0

@George Cummins:哦,看起来是解决问题的好方法。会尝试类似的东西。 –

+0

@RicardoArruda,我的答案和相应的小提琴提供了这个功能的例子。 –

-1

如果你的目标是做的就是让所有的复选框选中值的列表,你可以这样做:

$('.checkboxEstados:checked').each(function(){ 
    alert($(this).val()); 
}); 

,并应返回所有已选中复选框的项目。那么你不必担心添加和删除文本框中的数据。我只是提醒你的价值,你会想将它们存储到一个对象或更有用的东西。

+0

为什么这个回应会降低? – arb

0

我将值存储在一个数组,并为其添加和删除值,然后写入阵列的输出,而不是试图每次分析文本:

var estadosS = []; 

$(".checkboxEstados").live("click", function(){ 
    var index; 

    if($(this).is(":checked")){ 
     // append the id to the list 
     estadosS.push($(this).attr("id")); 
    }else{ 
     index = estadosS.indexOf($(this).attr("id")); 

     if(index > -1) { 
      estadosS.splice(index, 1); 
     } 
    } 

    $("#holdEstados").val(estadosS.join(separador)); 
});