我有一个查询构建器表单,允许用户在完成后允许他们将输入的值传递给搜索字段的字段中输入值。并非所有字段都必须由表单中的用户完成。
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>
在jQuery中,我创建了一个函数来将字段的值传递给asp.net文本框控件
function setAdvancedSearchString() {
checkField();
var txt = $("input[name='tbsearchterm']");
var fields = $("#advanceSearchCriteria :input").serializeArray();
jQuery.each(fields, function (i, field) {
if (txt) {
txt.val(txt.val() + field.name + ": " field.value + " ");
}
});
}
使用当前方法,返回所有输入字段及其值。我想要的只是包含用户输入的值的字段,以便序列化并传递给搜索词。例如,如果用户只输入了姓氏,我只希望返回该字段名和值(姓氏:詹姆斯)
我已尝试在var字段上测试null,但我的语法错误或我在错误的位置测试null
到目前为止,我已尝试过以下内容:
var fields = if($("#advanceSearchCriteria :input") != null)
{
$("#advanceSearchCriteria :input").serializeArray();
}
但这似乎导致编译错误。
有人可以提供一些关于如何仅序列化并返回输入值的字段名和值的帮助吗?
谢谢,
答案 0 :(得分:1)
试试这个
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 + " ");
}
});
}
答案 1 :(得分:1)
DEMO 此处
您可以使用:input [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 + " ");
}
});
}
答案 2 :(得分:0)
试试这个:
$("#advanceSearchCriteria :input").filter(function() {
return $(this).val() != "";
}).serializeArray();
答案 3 :(得分:0)
您可以使用attribute not equals selector
选择包含文字的字段,而不必使用.serializeArray()
。检查一下(example):
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('');
});
});
}
<强>附加强>
我使用匿名函数来设置txt
的值,并使用array / join进行字符串连接。