iT邦幫忙

0

JQ DataTable (自定義搜尋)用下拉列表,不重新載入下選擇其他欄位 搜索search input text 找不到資料

  • 分享至 

  • xImage

Jq DataTable中
設計有一個下拉選單可以選擇欄位(column)
還有一個input text可以輸入要查詢(search)的值
第一次載入後,使用下拉選擇到的欄位都可以正常查詢
但在不重新載入
更換下拉選單中的欄位後再次查詢, 卻都說找不到data

謝謝各位,歡迎任何回答,十分感謝


個人觀察(但不確定)
datatable 就是只顯示畫面上有的rows再去查詢
所以在第一次查詢後(rows減少)再次查詢不在畫面上的data就會變成找不到
可是不知道要怎麼改code才能在再次查找全data

demo
https://jsfiddle.net/8dsnaLpf/1/

code

    function filterColumn () {
         var str = $('#test').val();
         var selected = parseInt($('#JobID').val());
         console.log(str, selected);
         $('#ex').DataTable().columns(selected).search(str).draw();
    }
    $(document).ready(function() {
        $('#ex').DataTable();
        
        $('.test_column_filter').on( 'click', function () {
            filterColumn();
        } );
    } );

流程圖片


  1. 第一次載入時的畫面, 有三筆資料
    https://ithelp.ithome.com.tw/upload/images/20210727/20120558kJrAaVuIIs.png

  1. 第一次載入時可以正常選欄位(選age(index=2)), 輸入值 input="25"
    找到兩筆資料並顯示
    https://ithelp.ithome.com.tw/upload/images/20210727/20120558DvIUqEvFci.png

3-1. 不重新載入下, 更換下拉選擇其他欄位, 資料還在畫面上就可以正常顯示
https://ithelp.ithome.com.tw/upload/images/20210727/20120558yRJnoAxSTh.png


3-2. 但假如輸入的是不在畫面上的資料(但資料是存在的), 就會顯示沒有資料
https://ithelp.ithome.com.tw/upload/images/20210727/20120558cF6rx8f6nf.png

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">        

<div class="card">
            <div class="card-body">
            <form id="clear">
                <div class="row">
                  <!--Name-->
                  <div class="col-md-2 pl-1">
                        <div class="form-group" id="filter_col0" data-column="0">
                            <label>Search</label>
                            <input type="text" id="test" name="" class="form-control column_filter" id="col0_filter">
                        </div>
                    </div>
                  <!--Job-->
                  <div class="col-md-2 pl-1">
                        <div class="form-group" id="filter_col1" data-column="1">
                            <label>Job</label>
                            <select id="JobID" class="form-control" id="col1_filter">
                                    <option value="0">0</option>
                                    <option value="1">1</option>
                                    <option value="2">2</option>
                            </select>
                            </div>
                      </div>
              
                </form>
                <div class="text-center">
                  <button type="button" class="test_column_filter">test</button>
                </div>
            </div>
        </div>
        <hr>
<!---------------------------------------------------------------------------------------------------->
<div class="card row">
    <div class="col-lg-12">
            <br>
                <header>
                <div class="table-responsive">
                    <table id="ex" class="table table-striped table-bordered">
                        <thead>
					<tr>
						<th>Name</th>
						<th>Job</th>
						<th>Age</th>
						<th>date</th>
					</tr>
                        </thead>
                        <tbody>
                     <tr>
						<th>A1</th>
						<th>student</th>
						<th>25</th>
						<th>10/31/2018</th>
					</tr>
                					<tr>
						<th>A2</th>
						<th>teacher</th>
						<th>33</th>
						<th>05/22/2018</th>
					</tr>
                		<tr>
						<th>A3</th>
						<th>drive</th>
						<th>25</th>
						<th>07/13/2018</th>
					</tr>
                      </tbody>
                    </table>

                  </div>
                </header>
            </div>
            </div>
 <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js"></script>
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0

你的問題 我猜猜看….
是因為Datatable 是用js filter 的方式
尋找「畫面上」的 資料 是否有符合條件
如果沒在「畫面上」的資料,那不在範圍裡?

謝謝回覆,問題就是大大所描述的那樣,目前因為還是找不到方法所以每次搜尋結束後就讓 $('#ex').DataTable() =>這個變數重讀一次datatable這樣(雖然聽起來很爛就是了==)

0
firecold
iT邦新手 1 級 ‧ 2021-07-28 16:11:21

https://datatables.net/extensions/fixedcolumns/examples/styling/col_filter.html

看起來應該是因為你用了下拉選單導致filter條件變成交集
改成demo的應該就可以了

謝謝回覆,這問題後來用重讀變數來暫時解決QQ
明天來研究一下大大提供的方法,真的十分感激

我要發表回答

立即登入回答