2012-01-04 45 views
0

我有一个查询生成器窗体,允许用户输入值到字段中,一旦完成允许他们将输入的值传递到搜索字段。并非所有的字段都必须由表单中的用户完成。 HTML的如何只返回与jQuery有价值的字段

样品

<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 TextBox控件

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

您可以使用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的价值和使用阵列/连接字符串连接。

+0

感谢您的额外提示。作为一个侧面的问题是可以安全地假设,如果我不需要创建一个json对象数组/ join是更简单的方法。这似乎更通过jquery serializeArray我可读。 – rlcrews 2012-01-05 01:29:20

+0

这取决于你。如果您不使用大数据集,那么可读性可能是您的首要任务。 – 2012-01-05 02:05:34

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 + " "); 
     } 
    }); 
} 
0

试试这个:

$("#advanceSearchCriteria :input").filter(function() { 
    return $(this).val() != ""; 
}).serializeArray(); 
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 + " "); 
     } 
    }); 
} 
+0

谢谢你的提示和演示这是非常有用的。 – rlcrews 2012-01-05 01:30:39