如何使用jQuery仅返回具有值的字段

如何使用jQuery仅返回具有值的字段,jquery,Jquery,我有一个查询生成器表单,允许用户在字段中输入值,一旦完成,允许用户将输入的值传递到搜索字段。并非表单中的所有字段都必须由用户填写 html示例 <div id="advanceSearchCriteria"> <div class="searchHeader">Person</div> <div class="contentBorders" id="person"> <div class="searchdiv"

我有一个查询生成器表单,允许用户在字段中输入值,一旦完成,允许用户将输入的值传递到搜索字段。并非表单中的所有字段都必须由用户填写

html示例

<div id="advanceSearchCriteria">
    <div class="searchHeader">Person</div>
    <div class="contentBorders" id="person">
        <div class="searchdiv">
            <span class="smLabel">Last Name</span><br />
            <input type="text" name="lastname" value="" size="15" />
        </div>
        <div class="searchdiv">
            <span class="smLabel">First Name</span><br />
            <input type="text" name="namefirst" value="" size="15" />
        </div>
        <div class="searchdiv">
            <span class="smLabel">Middle Name</span><br />
            <input type="text" name="namemiddle" value="" size="10" />
        </div>
        <div class="searchdiv">
            <span class="smLabel">Suffix</span><br />
            <input type="text" name="suffix1" value="" size="5" />
        </div>
</div>
</div>
在当前方法中,这将返回所有输入字段及其值。我想要的只是包含用户输入的值的字段,这些值将被序列化并传递给搜索词。例如,如果用户只输入姓氏,我只希望返回该字段名和值(姓氏:james)

我尝试在var字段上测试null,但语法错误,或者在错误的位置测试null

到目前为止,我尝试了以下方法:

var fields = if($("#advanceSearchCriteria :input") != null) 
{
$("#advanceSearchCriteria :input").serializeArray();
}
但这似乎会导致编译错误

是否有人可以提供一些帮助,说明如何仅序列化和返回输入了值的字段名和值

谢谢,

试试这个

function setAdvancedSearchString() {
    checkField();
    var txt = $("input[name='tbsearchterm']");
    var fields = $("#advanceSearchCriteria :input").serializeArray();
    jQuery.each(fields, function (i, field) {
        if (txt && field.value !='') {
            txt.val(txt.val() + field.name + ": " field.value + " ");
        }
    });
}
试试这个:

$("#advanceSearchCriteria :input").filter(function() { 
    return $(this).val() != ""; 
}).serializeArray();
这里

您可以使用
:输入[value!='']
。检查下面我的版本

function setAdvancedSearchString() {
   checkField();
   var txt = $("input[name='tbsearchterm']");
   var fields = $("#advanceSearchCriteria :input[value != '']").serializeArray();
   jQuery.each(fields, function (i, field) {
     if (txt) {
        txt.val(txt.val() + field.name + ": " field.value + " ");
      }
   });
}
您可以使用选择包含文本的字段,而不必使用
.serializeArray()
。选中此():

额外的

我使用了一个匿名函数来设置
txt
的值,并使用array/join来连接字符串。

感谢您提供的额外提示。作为一个附带问题,假设不需要创建json对象数组/连接是更简单的方法是否安全。这似乎比jquery序列化数组更容易理解。这取决于您。如果您不使用大型数据集,那么可读性可能是您的首要任务。感谢您提供的提示和演示,这非常有用。
function setAdvancedSearchString() {
   checkField();
   var txt = $("input[name='tbsearchterm']");
   var fields = $("#advanceSearchCriteria :input[value != '']").serializeArray();
   jQuery.each(fields, function (i, field) {
     if (txt) {
        txt.val(txt.val() + field.name + ": " field.value + " ");
      }
   });
}
function setAdvancedSearchString() {
   checkField();
   var txt = $("input[name='tbsearchterm']");
    $("#advanceSearchCriteria :input[value!='']").each(function(i, field) {
        txt.val(function(index, value) {
            return [value, field.name, ": ", field.value, " "].join('');
        });
    });
}