jQuery を使用して検索フィルター メニューを作成しています。このフォームには、チェックボックスや入力ボックスなどのいくつかのフォーム要素が含まれています。ユーザーがフォームに何らかの変更を加えて#apply-filters
ボタンをクリックすると、フォームは非表示になり、そのデータは を介して処理するためにサーバー バックエンドに送信されます$.post()
。
ユーザーがフォームに変更を加えた後、ボタンをクリックせずにフォームを閉じた場合#apply-filters
、フィルター メニューdiv
は非表示になり、次にユーザーがフィルター メニューを再度開くと、ユーザーが行った最新の設定ではなく、初期設定が表示されます。しかし、クリックに失敗しました#apply-filters
。
問題: jQuery でこれを行う最善の方法は何ですか?
HTML
<form id="filter-menu">
<input type="checkbox" id="free" name="free" /><label for="free">Free</label>
<input type="checkbox" id="sale" name="sale" /><label for="sale">Sale</label>
<input type="checkbox" id="rooms_1" name="rooms[]" value=1/><label for="rooms_1">1 Room</label>
<input type="checkbox" id="rooms_2" name="rooms[]" value=2 /><label for="rooms_2">2 Rooms</label>
<input type="text" id="price" val="100" />
<button id="apply-filers">Apply Filters</button>
</form>
jQuery
$('#apply-filters').click(function() {
$('#filter-menu').serializeArray(); // Gives an empty array
$.post('api/someplace',
{ free: 1,
sale: 1,
rooms: [1, 2],
price: 100
}, function() {
console.log('yay');
});
});
アップデート
私がする時
JSON.stringify($('filter-form').serializeArray())
私は得る
[{"name":"rooms[]","value":"1"},{"name":"rooms[]","value":"2"}]"
$.post()
ただし、 like経由でサーバー側に送信したい
{rooms: [1,2]}
このようにして、サーバー側で実行できるようになります(PHP、フレームワーク関数で処理した後)
$rooms = implode(',', $rooms_array) // gives `1,2`
MySQLクエリは次のようになります
SELECT .... WHERE rooms IN (1,2)
これは可能ですか?サーバー側に送信するにはどうすればよいでしょうか? また、 からの出力をどのように使用しserializeArray()
て にフィードし$.post()
ますか?