如何在值为空时隐藏附加的输入名称
大家好,我有一个小脚本,将输入值列表及其名称附加到textarea中。 我想要做的是在值为0
或empty
时隐藏字段名称。
这是脚本:
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(', ')); });