2015-11-02 80 views
1

我正在使用jQuery DataTables 1.10.9并试图更改jQuery DataTables中的搜索功能,以便它在开始搜索前至少需要3个字符。所以,我读了你需要取消绑定当前数据表搜索框,像这样:更改数据表搜索功能

$(".dataTables_filter input").unbind().bind("keyup", function(){ 
    alert("whoo"); 
}); 

因此,现在应提醒whoo当我在搜索框输入任何内容,但它只是做了正常的搜索功能。所以我的猜测是它没有得到正确的领域。我也尝试过:

$('.input[type="search"]').unbind().bind("keyup", function(){ 
    alert("whoo"); 
}); 

但这也没有帮助。

var dt = $('#example').DataTable({ 
    "order": [[11, "desc"]], 
    "processing": true, 
    "serverSide": true, 
    "ajax": "/datatables/test" + id, 
    "language": { 
     "url": "http://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Dutch.json" 
    } 
}); 

编辑

我曾尝试从jQuery DataTables: Delay search until 3 characters been typed OR a button clicked

的代码,但因为我没有得到这样的工作,我张贴了这个问题。

我的猜测是它不工作,它只是无法找到输入表单,但我不明白为什么,所以生病我的HTML在这里以及。

<input type="hidden" id="q" name="q" value="<?php echo $_GET['q']; ?>"/> 
<table id="example" class="table table-hover" cellspacing="0" width="100%"> 
    <?php if($_GET['k_id'] != ""){?> 
     <input type = "hidden" value = "<?php echo $_GET['k_id']; ?>" id = "k_id" /> 
    <?php }elseif($_GET['w_id'] != ""){ ?> 
     <input type="hidden" value="<?php echo $_GET['w_id']; ?>" id="w_id"/> 
    <?php } ?> 
    <thead> 

此页面是关于查找当前数据库中的每个产品。这3个输入字段在那里,因此当用户查看某人的个人资料时,他想查看他们有待售的产品,它将填充一个变量并将其发送到数据表功能。 (这也解释了为什么+ id是一个AJAX网址后面)

if($('#k_id').val() > 0) { 
      var id = "?k_id=" + $('#k_id').val(); 
     }else if($('#w_id').val()){ 
      var id = "?w_id=" + $('#w_id').val(); 
     }else{ 
      var id = ""; 
     } 

输入形式是使用id = example_filter和class = dataTables_filter一个div内(我会上传图片,但我没有10还代表XD)。

+1

的可能的复制[jQuery的数据表:延迟搜索,直到3个字符被键入或按钮点击(http://stackoverflow.com/questions/5548893/jquery-datatables-delay-search-until -3字符 - 键入或按钮 - clicke) – markpsmith

回答

3

SOLUTION

使用下面的代码来禁用默认的处理程序,并附上自己的事件处理程序,用户键入的东西在搜索框中。

$('.dataTables_filter input', dt.table().container()) 
    .off('.DT') 
    .on('keyup.DT cut.DT paste.DT input.DT search.DT', function (e) { 
     // If the length is 3 or more characters, or the user pressed ENTER, search 
     if(this.value.length >= 3 || e.keyCode == 13) { 
      // Call the API search function 
      dt.search(this.value).draw(); 
     } 

     // Ensure we clear the search if they backspace far enough 
     if(this.value === "") { 
      dt.search("").draw(); 
     } 
    }); 

LINKS

+0

嘿谢谢你的快速反应!不知道你对table.table()。container()的意思。我是否需要将我的表格ID $(“#example”)或只是?在此先感谢^^ – Kroodjebaas

+0

@Kroodjebaas,更正了代码,'dt.table()。container()'返回包含整个表格的'div'元素。 –

+0

谢谢!可悲的是它不工作..更新我的问题! – Kroodjebaas

0

这应该这样做,如果输入长度为3个或更多字符它查找输入VAL,否则保持所有结果。 working jsfiddle

$('.dataTables_filter input').unbind().bind("input", function (e) { 

    if ($(this).val().length < 3) 
     dt.fnFilter(""); 
    else 
     dt.fnFilter($(this).val()); 
}); 
+0

感谢您的回答,可悲的是它不是:更新了我的问题。 – Kroodjebaas

1

行,所以我想通了,我的问题是什么..

了jQuery一直在寻找$( 'dataTables_filter输入'),它实际上存在之前。而答案就是放置一个窗口。负载周围

$(window).load(function(){ 
      var iets = $('.dataTables_filter input'); 
      iets.unbind().bind("keyup", function (e) { 
       if(iets.val().length >= 3) { 
        dt.search(iets.val()).draw(); 
       } 
       if(iets.val() === ""){ 
        dt.search(iets.val()).draw(); 
       } 
      }); 
     });