2012-01-04 26 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