Javascript 如何从列表中删除多余的逗号
我有一个复选框列表,如果选中了一个复选框,我会将复选框值附加到页面其他地方的输入字段中。如果复选框未选中,我将从隐藏的输入字段中删除该值。所发生的情况是,如果值被添加和删除得很好,但当复选框被选中、未选中、已选中、未选中等时,它们会留下一系列逗号 A) 我应该为此担心吗Javascript 如何从列表中删除多余的逗号,javascript,jquery,Javascript,Jquery,我有一个复选框列表,如果选中了一个复选框,我会将复选框值附加到页面其他地方的输入字段中。如果复选框未选中,我将从隐藏的输入字段中删除该值。所发生的情况是,如果值被添加和删除得很好,但当复选框被选中、未选中、已选中、未选中等时,它们会留下一系列逗号 A) 我应该为此担心吗 B) 如果是,我应该如何改变我的添加/附加例程(见下文),或者有更好的方法来完成我正在做的事情吗?我更愿意以一个干净的列表结束,比如0\u 1,0\u 2,41\u 4,而不是0\u 1,,,,,,,,,,,,,,,,,,,,0
B) 如果是,我应该如何改变我的添加/附加例程(见下文),或者有更好的方法来完成我正在做的事情吗?我更愿意以一个干净的列表结束,比如
0\u 1,0\u 2,41\u 4
,而不是0\u 1,,,,,,,,,,,,,,,,,,,,0\u 2,,,,,,41\u 4,,,,,,,,,
<input type="text" value="0_1,0_2,41_4" id="EOStatus_SelLayers" />
// example of dataset: '0_1,0_2,41_4';
if ( xyz.hasClass("icon-check-empty") ) {
var existing_str = $('#EOStatus_SelLayers').val();
if (existing_str==null || existing_str==""){
//add
$('#EOStatus_SelLayers').val(id);
}
else {
//append
$('#EOStatus_SelLayers').val( existing_str + ',' + id);
}
}
else {
$(xyz).removeClass("icon-check").addClass("icon-check-empty");
var old_str = $('#EOStatus_SelLayers').val();
var new_str = old_str.replace(','+id,'');
var new_str = old_str.replace(id,'');
$('#EOStatus_SelLayers').val(new_str);
}
可以用空字符串替换id,然后替换任何无关的逗号 有三个地方可以用一个无关的逗号结束:
.replace(/,,/g, ",").replace(/^,|,$/g, "");
在适当的地方可能会像这样:
else {
$(xyz).removeClass("icon-check").addClass("icon-check-empty");
var old_str = $('#EOStatus_SelLayers').val();
var new_str = old_str.replace(id,'').replace(/,,/g, ",").replace(/^,|,$/g, "");
$('#EOStatus_SelLayers').val(new_str);
}
可以用空字符串替换id,然后替换任何无关的逗号 有三个地方可以用一个无关的逗号结束:
.replace(/,,/g, ",").replace(/^,|,$/g, "");
在适当的地方可能会像这样:
else {
$(xyz).removeClass("icon-check").addClass("icon-check-empty");
var old_str = $('#EOStatus_SelLayers').val();
var new_str = old_str.replace(id,'').replace(/,,/g, ",").replace(/^,|,$/g, "");
$('#EOStatus_SelLayers').val(new_str);
}
如果您使用的是jQuery,一种更简单的方法是每次更改复选框时重新设置输入值?只需输入每个:选中输入的ID。。。如果您使用自定义库来更改复选框的外观,我确信会有一个更改事件触发器,允许以下操作正常工作 或者,您应该能够编辑以满足您的特定需要
$('input[type=checkbox]').on('change', function(e) {
var newVal = [];
$('input[type=checkbox]:checked').each(function() {
newVal.push($(this).attr('id'));
});
$('#EOStatus_SelLayers').val(newVal.join(','));
});
或者,在使用图像的情况下:
$('[class^="icon-check"]').on('click', function(e) {
var newVal = [];
$('.icon-check').each(function() {
newVal.push($(this).attr('id'));
});
$(this).toggleClass('icon-check-empty');
$(this).toggleClass('icon-check');
$('#EOStatus_SelLayers').val(newVal.join(','));
});
免责声明:未测试-但看起来应该可以使用。如果使用jQuery,更简单的方法是每次更改复选框时重新设置输入值?只需输入每个:选中输入的ID。。。如果您使用自定义库来更改复选框的外观,我确信会有一个更改事件触发器,允许以下操作正常工作 或者,您应该能够编辑以满足您的特定需要
$('input[type=checkbox]').on('change', function(e) {
var newVal = [];
$('input[type=checkbox]:checked').each(function() {
newVal.push($(this).attr('id'));
});
$('#EOStatus_SelLayers').val(newVal.join(','));
});
或者,在使用图像的情况下:
$('[class^="icon-check"]').on('click', function(e) {
var newVal = [];
$('.icon-check').each(function() {
newVal.push($(this).attr('id'));
});
$(this).toggleClass('icon-check-empty');
$(this).toggleClass('icon-check');
$('#EOStatus_SelLayers').val(newVal.join(','));
});
免责声明:未经测试-但看起来它应该可以工作。啊,我没有考虑前导或尾随逗号。抢手货现在正在测试解决方案。好的,这非常漂亮。给我的新片段。如果这么说时间已经过去了,我会同意的。啊,我没有想到前导或尾随逗号。抢手货现在正在测试解决方案。好的,这非常漂亮。给我的新片段。我不是真的在使用复选框,我使用的图像看起来像一个更大的复选框(它更大,我的客户更容易看到它)。否则,您的解决方案看起来确实不错。当我完成我的项目时,我会试试看。我不熟悉.push,所以它看起来确实很有趣。array push是ECMAScript 3标准,在IE5.5+和任何普通浏览器中都可以使用。更多信息请点击这里。我对上面的内容进行了编辑,以提供一个关于如何使用图像的示例。免责声明:未测试-但看起来它应该可以工作。您现在的解决方案与以前的不同,所以我也尝试了这个。使用.push和.splice,我决定不再需要隐藏的输入,也可以在更小的代码库中完成所有需要的操作。谢谢你睁开我的眼睛。:)我并没有真正使用复选框,我使用的图像看起来像一个更大的复选框(它更大,我的客户更容易看到它)。否则,您的解决方案看起来确实不错。当我完成我的项目时,我会试试看。我不熟悉.push,所以它看起来确实很有趣。array push是ECMAScript 3标准,在IE5.5+和任何普通浏览器中都可以使用。更多信息请点击这里。我对上面的内容进行了编辑,以提供一个关于如何使用图像的示例。免责声明:未测试-但看起来它应该可以工作。您现在的解决方案与以前的不同,所以我也尝试了这个。使用.push和.splice,我决定不再需要隐藏的输入,也可以在更小的代码库中完成所有需要的操作。谢谢你睁开我的眼睛。:)