2015-12-29 27 views
2

我正在使用Table排序器来创建一些页面上的表格。我需要为日期(我管理)添加“上周/月/年”搜索功能,但代码仅在第一次使用其中一个按钮时执行。Tablesorter插件,触发器('搜索',...)不触发

我在http://garciaoliver.com/cosas/table/

做了演示。如果你点击按钮,检查您的控制台,你会看到只有第一个单击实际上触发filter_function

filter_functions : { 
    '.date-col' : function(e, n) { 
     console.log (e_date > date_start_parsed && e_date < date_end_parsed ? "true" : "false"); 
     // actual filter code is hidden 
    } 
} 

里面的内码然而,可以使用jquery ui日期选择器根据需要多次更改日期(并且触发搜索的代码相同)。

我做了一个jsFiddle,所以你可以检查代码(我没有添加所有的外部资源来实际运行演示)。

https://jsfiddle.net/fk7pk3y0/

如果你想下载测试文件,请到http://garciaoliver.com/cosas/table/table.tar.gz

任何帮助是极大的赞赏。

在此先感谢, 伊格纳西奥

回答

1

搜索实际上是触发,但被搜索的唯一事情是结束日期。

事实上,没有违法意图,但你让它太复杂了。我updated the demo通过移除filter_function和添加新功能:

function searchTable() { 
    var query = [], 
    str = ''; 
    if (date_search_start && date_search_end) { 
    str = date_search_start + ' - ' + date_search_end; 
    } else if (date_search_start && !date_search_end) { 
    str = '>=' + date_search_start; 
    } else if (!date_search_start && date_search_end) { 
    str = '<=' + date_search_end; 
    } 
    query[ date_col_id ] = str; 
    $table.trigger('search', [ query ]); 
} 

因此,当只启动设置,它过滤日期比设定日期。如果仅设置了结束日期,则会过滤比设置日期更短的日期。否则,它会使日期进入一个范围。

在此之前,搜索将工作,虽然,你需要设置的头一个“过滤器解析的”类,以便过滤器窗口小部件知道,只过滤器解析值

<th class="date-col filter-parsed">Date</th> 

我也不得不删除filter_defaultFilter设置。因此,您知道filter_placeholder选项仅适用于过滤器行,因此如果要将占位符文本添加到日期选择器输入中,则需要添加占位符属性。

+0

感谢您的快速回复。我已经测试过它,它的功能就像一个魅力。我不知道你可以使用“<=”等来构建查询,所以我确实去解决这个过于复杂的解决方案。我仍然不清楚为什么我会得到这种行为,但现在并不重要。再次感谢! – igarciaoliver