2012-01-04 14 views
0

私は、ユーザーが入力した値を検索フィールドに渡すことができるフィールドに値を入力できるようにするクエリビルダフォームを持っています。フォーム内のユーザーがすべてのフィールドを完了する必要はありません。 jQueryの内jQueryで値を持つフィールドのみを返す方法

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> 

私は、これがすべての入力フィールドを返し、現在のアプローチで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 + " "); 
     } 
    }); 
} 

の関数を作成とその値。私が望むのは、ユーザーがシリアライズして検索語に渡すために入力した値を含むフィールドだけです。たとえば、ユーザが姓を入力しただけの場合、そのフィールド名と値が返されます(姓:james)

varフィールドでnullをテストしようとしましたが、構文が間違っているか、

var fields = if($("#advanceSearchCriteria :input") != null) 
{ 
$("#advanceSearchCriteria :input").serializeArray(); 
} 

が、これはコンパイルエラーを引き起こしているようだ:間違った場所に

は、これまでのところ私は、次の試してみました。

値を入力したフィールド名と値をシリアル化して返す方法については、誰でも助けてもらえますか?あなたが:input [value != '']を使用することができます

$("#advanceSearchCriteria :input").filter(function() { 
    return $(this).val() != ""; 
}).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オブジェクト配列/ジョインを作成する必要がない場合は、より簡単なアプローチであると仮定することは安全です。これは、jquery serializeArrayよりもわかりやすいようです。 – rlcrews

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

を試してみてください、ありがとうございます。以下の私のバージョンを確認し、

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

DEMO

+0

チップとデモをありがとう、これは非常に便利でした。 – rlcrews

関連する問題