diff --git a/js/utils/tap.js b/js/utils/tap.js
index ec8d14b35b..c868f1e4d6 100644
--- a/js/utils/tap.js
+++ b/js/utils/tap.js
@@ -228,12 +228,20 @@ ionic.tap = {
},
requiresNativeClick: function(ele) {
- if(!ele || ele.disabled || (/^(file|range)$/i).test(ele.type) || (/^(object|video)$/i).test(ele.tagName) ) {
+ if(!ele || ele.disabled || (/^(file|range)$/i).test(ele.type) || (/^(object|video)$/i).test(ele.tagName) || ionic.tap.isLabelContainingFileInput(ele) ) {
return true;
}
return ionic.tap.isElementTapDisabled(ele);
},
+ isLabelContainingFileInput: function(ele) {
+ var lbl = tapContainingElement(ele);
+ if(lbl.tagName !== 'LABEL') return false;
+ var fileInput = lbl.querySelector('input[type=file]');
+ if(fileInput && fileInput.disabled === false) return true;
+ return false;
+ },
+
isElementTapDisabled: function(ele) {
if(ele && ele.nodeType === 1) {
var element = ele;
diff --git a/test/html/tapInputs.html b/test/html/tapInputs.html
index 78a3ce7927..04cd25bece 100755
--- a/test/html/tapInputs.html
+++ b/test/html/tapInputs.html
@@ -168,6 +168,15 @@
+
+ File Input
+
+
Other Tests
diff --git a/test/unit/utils/tap.unit.js b/test/unit/utils/tap.unit.js
index b3969a096b..3335f98f22 100644
--- a/test/unit/utils/tap.unit.js
+++ b/test/unit/utils/tap.unit.js
@@ -746,6 +746,24 @@ describe('Ionic Tap', function() {
expect( ionic.tap.requiresNativeClick( div5 ) ).toEqual(true);
});
+ it('Should ionic.tap.requiresNativeClick for labels containing input[file]', function() {
+ var lbl = document.createElement('label');
+ var ele = document.createElement('input');
+ ele.type = 'file';
+ lbl.appendChild(ele);
+ expect( ionic.tap.requiresNativeClick( lbl ) ).toEqual(true);
+ });
+
+ it('Should ionic.tap.requiresNativeClick for elements underneath labels containing input[file]', function() {
+ var lbl = document.createElement('label');
+ var txt = document.createElement('span');
+ var ele = document.createElement('input');
+ ele.type = 'file';
+ lbl.appendChild(ele);
+ lbl.appendChild(txt);
+ expect( ionic.tap.requiresNativeClick( txt ) ).toEqual(true);
+ });
+
it('Should not allow a click that has an textarea target but not created by tapClick', function() {
var e = {
target: document.createElement('textarea'),