From 03775e93f2a0ec31c65142fd69e2bd7ff87e3f4b Mon Sep 17 00:00:00 2001 From: Ghislain Seguin Date: Thu, 3 Jan 2013 23:18:16 -0700 Subject: [PATCH 1/2] Listview Filter: Prevent onKeyUp handler to be called twice for the same value --- js/widgets/listview.filter.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/js/widgets/listview.filter.js b/js/widgets/listview.filter.js index 2f550923e73..3440ddc6eff 100644 --- a/js/widgets/listview.filter.js +++ b/js/widgets/listview.filter.js @@ -39,13 +39,7 @@ $( document ).delegate( "ul, ol", "listviewcreate", function() { e.preventDefault(); search.blur(); }), - search = $( "", { - placeholder: listview.options.filterPlaceholder - }) - .attr( "data-" + $.mobile.ns + "type", "search" ) - .jqmData( "lastval", "" ) - .bind( "keyup change input", function() { - + onKeyUp = function( e ) { var $this = $( this ), val = this.value.toLowerCase(), listItems = null, @@ -57,6 +51,11 @@ $( document ).delegate( "ul, ol", "listviewcreate", function() { // Check if a custom filter callback applies isCustomFilterCallback = listview.options.filterCallback !== defaultFilterCallback; + if ( lastval && lastval === val ) { + // Execute the handler only once per value change + return; + } + listview._trigger( "beforefilter", "beforefilter", { input: this } ); // Change val as lastval for next execution @@ -119,7 +118,13 @@ $( document ).delegate( "ul, ol", "listviewcreate", function() { listItems.toggleClass( "ui-screen-hidden", !!listview.options.filterReveal ); } listview._addFirstLastClasses( li, listview._getVisibles( li, false ), false ); + }, + search = $( "", { + placeholder: listview.options.filterPlaceholder }) + .attr( "data-" + $.mobile.ns + "type", "search" ) + .jqmData( "lastval", "" ) + .bind( "keyup change input", onKeyUp ) .appendTo( wrapper ) .textinput(); From 88e86a1440cc1175f5916c4e9690843febe09c13 Mon Sep 17 00:00:00 2001 From: Ghislain Seguin Date: Fri, 4 Jan 2013 16:16:39 -0700 Subject: [PATCH 2/2] Listview test: Added test case for issue #5198 --- tests/unit/listview/listview_core.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/unit/listview/listview_core.js b/tests/unit/listview/listview_core.js index 641708d3efb..14756ea1f0c 100755 --- a/tests/unit/listview/listview_core.js +++ b/tests/unit/listview/listview_core.js @@ -467,6 +467,34 @@ ]); }); + asyncTest( "event listviewbeforefilter firing", function() { + var $searchPage = $( searchFilterId ); + $.testHelper.pageSequence([ + function() { + $.mobile.changePage( searchFilterId ); + }, + + function() { + var beforeFilterCount = 0; + $searchPage.on( "listviewbeforefilter", function( e ) { + beforeFilterCount += 1; + }); + $searchPage.find( 'input' ).val( "a" ); + $searchPage.find( 'input' ).trigger('input'); + $searchPage.find( 'input' ).trigger('keyup'); + $searchPage.find( 'input' ).trigger('change'); + equal( beforeFilterCount, 1, "listviewbeforefilter should fire only once for the same value" ); + + $searchPage.find( 'input' ).val( "ab" ); + $searchPage.find( 'input' ).trigger('input'); + $searchPage.find( 'input' ).trigger('keyup'); + equal( beforeFilterCount, 2, "listviewbeforefilter should fire twice since value has changed" ); + + start(); + } + ]); + }); + test( "Refresh applies thumb styling", function(){ var ul = $('.ui-page-active ul');