diff --git a/js/utils/keyboard.js b/js/utils/keyboard.js index 39ee8d13dfc..d7bee46a484 100644 --- a/js/utils/keyboard.js +++ b/js/utils/keyboard.js @@ -104,7 +104,7 @@ function keyboardNativeShow(e) { } function keyboardBrowserFocusIn(e) { - if( !e.target || !ionic.tap.isTextInput(e.target) || !keyboardIsWithinScroll(e.target) ) return; + if( !e.target || !ionic.tap.isTextInput(e.target) || ionic.tap.isDateInput(e.target) || !keyboardIsWithinScroll(e.target) ) return; document.addEventListener('keydown', keyboardOnKeyDown, false); diff --git a/js/utils/tap.js b/js/utils/tap.js index 8290588e9a8..c5903c8e83d 100644 --- a/js/utils/tap.js +++ b/js/utils/tap.js @@ -166,6 +166,11 @@ ionic.tap = { (ele.tagName == 'INPUT' && !(/^(radio|checkbox|range|file|submit|reset)$/i).test(ele.type)) ); }, + isDateInput: function(ele) { + return !!ele && + (ele.tagName == 'INPUT' && (/^(date|time|datetime-local|month|week)$/i).test(ele.type)); + }, + isLabelWithTextInput: function(ele) { var container = tapContainingElement(ele, false); diff --git a/test/unit/utils/tap.unit.js b/test/unit/utils/tap.unit.js index c56b889d222..4455ee78c4f 100644 --- a/test/unit/utils/tap.unit.js +++ b/test/unit/utils/tap.unit.js @@ -1162,6 +1162,38 @@ describe('Ionic Tap', function() { expect( ionic.tap.isTextInput(ele) ).toEqual(false); }); + it('Should isDateInput', function() { + expect( ionic.tap.isDateInput(null) ).toEqual(false); + + ele = document.createElement('input'); + + ele.type = 'date'; + expect( ionic.tap.isDateInput(ele) ).toEqual(true); + + ele.type = 'datetime-local'; + expect( ionic.tap.isDateInput(ele) ).toEqual(true); + + ele.type = 'month'; + expect( ionic.tap.isDateInput(ele) ).toEqual(true); + + ele.type = 'week'; + expect( ionic.tap.isDateInput(ele) ).toEqual(true); + + ele.type = 'time'; + expect( ionic.tap.isDateInput(ele) ).toEqual(true); + + ele.type = 'checkbox'; + expect( ionic.tap.isDateInput(ele) ).toEqual(false); + + ele.type = ''; + expect( ionic.tap.isDateInput(ele) ).toEqual(false); + + ele.type = 'text'; + expect( ionic.tap.isDateInput(ele) ).toEqual(false); + + + }); + it('Should isLabelWithTextInput', function() { var label = document.createElement('label'); expect( ionic.tap.isLabelWithTextInput(label) ).toEqual(false);