Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
Javascript 如何从列表中删除多余的逗号_Javascript_Jquery - Fatal编程技术网

Javascript 如何从列表中删除多余的逗号

Javascript 如何从列表中删除多余的逗号,javascript,jquery,Javascript,Jquery,我有一个复选框列表,如果选中了一个复选框,我会将复选框值附加到页面其他地方的输入字段中。如果复选框未选中,我将从隐藏的输入字段中删除该值。所发生的情况是,如果值被添加和删除得很好,但当复选框被选中、未选中、已选中、未选中等时,它们会留下一系列逗号 A) 我应该为此担心吗 B) 如果是,我应该如何改变我的添加/附加例程(见下文),或者有更好的方法来完成我正在做的事情吗?我更愿意以一个干净的列表结束,比如0\u 1,0\u 2,41\u 4,而不是0\u 1,,,,,,,,,,,,,,,,,,,,0

我有一个复选框列表,如果选中了一个复选框,我会将复选框值附加到页面其他地方的输入字段中。如果复选框未选中,我将从隐藏的输入字段中删除该值。所发生的情况是,如果值被添加和删除得很好,但当复选框被选中、未选中、已选中、未选中等时,它们会留下一系列逗号

A) 我应该为此担心吗
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,我决定不再需要隐藏的输入,也可以在更小的代码库中完成所有需要的操作。谢谢你睁开我的眼睛。:)