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

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

这是脚本:

  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();  

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

我认为你应该使用.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(', ')); } 
 $("#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 ? "" : ", ")); 

这是一种方法:

 $('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(', ')); });