如何在值为空时隐藏附加的输入名称

时间:2013-04-05 14:23:40

标签: jquery serialization append

大家好,我有一个小脚本,将输入值列表及其名称附加到textarea中。我想要做的是在值0empty时隐藏字段名称。

这是脚本:

<script>
  function showValues() {
    var fields = $(".content :input").serializeArray();
    $("#contentlist_copy").empty();
    jQuery.each(fields, function(i, field){
      $("#contentlist_copy").append(field.value + " " + field.name + ", ");
    });
  } 
  $("input").change(showValues);
  showValues();     
</script>

我知道这是一个基本问题,我感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

$("#contentlist_copy").append(field.value + (!field.value || field.value == "0" ? "" : " " + field.name) + ", ");

<强>更新

如果您想要隐藏逗号

,请尝试此操作
$("#contentlist_copy").append(field.value + (!field.value || field.value == "0" ? "" : " " + field.name) + (!field.value ? "" : ", "));

答案 1 :(得分:1)

我认为您应该使用.val()方法来设置textarea的值。您还可以使用jQuery.map()方法将字符串数组合在一起,然后将它们连接起来。如果jQuery.map()方法的回调函数返回null或undefined,则该项不会添加到数组中。

function showValues() {
    var fields = $(".content :input").serializeArray();
    var tokens = jQuery.map(fields, function(field) {
            return (field.value && field.value != '0') ? (field.value + ' ' + field.name) : null;
        });
    $("#contentlist_copy").val(tokens.join(', '));
}

更新:

上面的代码试图保留大部分原始代码,但您实际上不需要调用.serializeArray()。在评论中,您询问使用“标题”而不是“名称”。以下代码执行此操作:

function showValues() {
    var tokens = [];
    $('.content :input').each(function() {
        var $input = $(this);
        if (($input.val() != '') && ($input.val() != '0')) {
            tokens.push($input.val() + ' ' + $input.attr('title'));
        }
    });
    $('#contentlist_copy').val(tokens.join(', '));
}

答案 2 :(得分:0)

这是一种方法:

$('input').change(function() {
    var valuePairs = $('.content :input').filter(function() {
        return this.value.length && this.value !== '0';
    }).map(function() {
        return this.value + ' ' + this.name;
    }).get();
    $('#contentlist_copy').val(valuePairs.join(', '));
});