jQueryのform.serializeを使用して空のフィールドを除外するには
-
03-07-2019 - |
質問
多数のテキスト入力を含む検索フォームがあります。 GETを介して送信するドロップダウン。検索の実行時にクエリ文字列から空のフィールドを削除することにより、よりクリーンな検索URLが欲しいです。
var form = $("form");
var serializedFormStr = form.serialize();
// I'd like to remove inputs where value is '' or '.' here
window.location.href = '/search?' + serializedFormStr
jQueryを使用してこれを行う方法はありますか?
解決
jQueryドキュメントを見てきましたが、< a href = "http://docs.jquery.com/Selectors" rel = "noreferrer">セレクター:
$("#myForm :input[value!='']").serialize() // does the job!
明らかに、#myFormはid&quot; myForm&quot;の要素を取得します。しかし、最初はあまりはっきりしていなかったのは、
:input は、すべての入力、テキストエリア、選択、ボタンに一致します要素。
[value!= ''] は属性ではありません等しいフィルター。奇妙な(そして役立つ)ことは、すべての:input 要素タイプには、選択やチェックボックスなどの値属性さえ含まれていることです。
最後に、値が「。」であった入力も削除します(質問で述べたように):
$("#myForm :input[value!=''][value!='.']").serialize()
この場合、並置、つまり 2つの属性セレクターを隣り合わせに配置すると、AND 。 カンマの使用はORを意味します。 CSSの担当者にとってそれが明らかな場合は申し訳ありません!
他のヒント
トムのソリューションを機能させることはできませんでした(?) jQuery 2.1.1を使用しています。
var formData = $("#formid :input")
.filter(function(index, element) {
return $(element).val() != '';
})
.serialize();
これは私のために働く:
data = $( "#my_form input").filter(function () {
return !!this.value;
}).serialize();
正規表現を使用して実行できます...
var orig = $('#myForm').serialize();
var withoutEmpties = orig.replace(/[^&]+=\.?(?:&|$)/g, '')
テストケース:
orig = "a=&b=.&c=&d=.&e=";
new => ""
orig = "a=&b=bbb&c=.&d=ddd&e=";
new => "b=bbb&d=ddd&" // dunno if that trailing & is a problem or not
上記のソリューションを使用しましたが、私にとってはうまくいきませんでした。だから私は次のコードを使用しました
$('#searchform').submit(function(){
var serializedData = $(this).serializeArray();
var query_str = '';
$.each(serializedData, function(i,data){
if($.trim(data['value'])){
query_str += (query_str == '') ? '?' + data['name'] + '=' + data['value'] : '&' + data['name'] + '=' + data['value'];
}
});
console.log(query_str);
return false;
});
誰かに役立つかもしれません
jQueryのソースコードを見ます。 最新バージョンの3287行目。
&quot; serialize2&quot;を追加します。および「serializeArray2」」関数。 もちろん、それらに意味のある名前を付けます。
または、より良い方法は、未使用の変数をserializedFormStrから引き出すための何かを書くことです。 =&ampを探すいくつかの正規表現。中央の文字列または=で終わる 正規表現ウィザードはありますか?
更新: 私はrogeriopvlの回答がより良い(+1)が好きです...特に今は良い正規表現ツールが見つからないので。
coffeescriptで、次の操作を行います。
serialized_form = $(_.filter($(context).find("form.params input"), (x) -> $(x).val() != '')).serialize()
セレクターのすべての要素を反復処理できる.each()jquery関数を確認する必要がある場合があります。この方法で、各入力フィールドを確認し、空かどうかを確認してから削除できますelement.remove()を使用してフォームから。その後、フォームをシリアル化できます。