2014-09-12 68 views
5

我有一个用AngularJS编写的cordova移动应用程序。在我的应用程序中添加ng-touch会导致一些html行为无法正常工作。这个问题的一个例子是复选框的怪异行为,当它被包装在用ng-click附加的HTML元素中时,它不会标记检查。这适用于台式机/笔记本电脑,问题出现在移动设备上。ng-click和ng-touch移动设备

实施例:

这并不在移动设备工作:

<div ng-click="alertSomething()"> 
    <input type="checkbox" ng-model="data" name="data" id="data" /> 
    <label for="data">This checkbox needs to be pressed a couple of times before it is marked as checked 
    in any mobile device.</label> 
    </div> 

虽然这一个正常工作:

<input type="checkbox" ng-model="anotherData" name="anotherData" id="anotherData" /> 
    <label for="anotherData">This checkbox responds correctly on mobile</label> 

最奇怪的是,当NG-触控模块是删除,它按预期正常工作。请帮助我,现在我一直在试图解决这个问题几个小时。

尝试在手机中打开此plunker:http://plnkr.co/edit/6LPeJP9QO6NMSpNuQqtQ?p=preview

+0

如果您正在使用jQuery我建议jQuery的触摸冲床(HTTP://touchpunch.furf。我最近在一个迷你游戏w上工作它有点击/拖放功能,它的测试版本不需要触摸,只需添加该库并不需要任何其他操作,使触摸完美适用于所有应用。 – GillesC 2014-09-12 17:00:30

+0

非常感谢您的支持,但我认为ryeballar的答案也适用于我。 – Drake105 2014-09-12 17:20:16

+0

哈哈是只是一个建议,不是一个答案,再加上没有jQuery标签:)插件基本上做的和答案一样,只是将触摸事件链接到非触摸事件。 – GillesC 2014-09-12 17:22:19

回答

5

其实我已经过这个问题之前来的时候,我所做的就是创建另一个指令,模拟点击事件,以取代ngTouchng-click型号,适用于特定的问题。

FORKED PLUNKER

DIRECTIVE

.directive('basicClick', function($parse, $rootScope) { 
    return { 
    compile: function(elem, attr) { 
     var fn = $parse(attr.basicClick); 
     return function(scope, elem) { 
     elem.on('click', function(e) { 
      fn(scope, {$event: e}); 
      scope.$apply(); 
     }); 
     }; 
    } 
    }; 
}); 

HTML

<div basic-click="alertSomething()"> 
    <input type="checkbox" ng-model="data" name="data" id="data" /> 
    <label for="data">This checkbox needs to be pressed a couple of times before it is marked as checked 
    in any mobile device.</label> 
    </div> 
+0

非常感谢! – Drake105 2014-09-12 17:21:56

+2

嘿,谢谢,它的2016年有没有其他解决方案,你找到了? – user2936008 2016-02-24 20:15:33