我有一个用敲除构建的动态列表视图:
<ul class="menu-items-listview" id="items-list"
data-role="listview" data-bind="foreach: Items" >
<li class="menu-item">
<div class="menu-item-container">
<div class="menu-amount-container">
<a id="dec-button" data-bind="click:$root.decCount, visible:Count">-</a>
<span data-bind="text: Count, visible: Count" class="item-amount-counter"></span>
<a id="inc-button" data-bind="click:$root.incCount">+</a>
</div>
</div>
</li>
</ul>
在桌面上一切都很好。在触摸设备上,每次刷新列表视图后,第一次点击#inc-button
或#dec-button
将触发两次。然后一切正常,直到列表视图被刷新。
线索1:页面上有两个iScrolldiv,看起来可能是它造成了问题。论坛上有关于jQuery事件订阅的问题,但没有淘汰绑定:
- https://github.com/cubiq/iscroll/issues/270
- 如何解决两次触发的点击事件
线索2:在列表视图刷新后,如果我触摸屏幕滚动,然后按下按钮,动作就会触发一次
编辑:这绝对是iScroll的问题。我禁用了iScroll脚本,操作按原样启动一次
我认为这种方法很棒,我个人会使用JQuery Mobile,它有一个vclick
事件,因为根据经验,这在Android上也更具响应性。
我已经不再在移动网站/应用程序上使用click
绑定。请参阅此处:在jQuery mobile中,什么';tap和vclick有区别吗?
<ul class="menu-items-listview" id="items-list"
data-role="listview" data-bind="foreach: Items" >
<li class="menu-item">
<div class="menu-item-container">
<div class="menu-amount-container">
<a id="dec-button" data-bind="event: { vclick: $root.decCount }, visible:Count">-</a>
<span data-bind="text: Count, visible: Count" class="item-amount-counter"></span>
<a id="inc-button" data-bind="event: { vclick: $root.incCount }">+</a>
</div>
</div>
</li>
</ul>
有其他选择,你可以使用他们的下载生成器来获得JqM的精简版本,只需获得特定触摸事件所需的最低数量。
编辑:如果只使用iScroll就解决了这个问题,你可以尝试为iOS动量滚动添加CSS吗?通常都会帮我。那么你至少可以避免一种依赖。请参见此处:http://johanbrook.com/browsers/native-momentum-scrolling-ios-5/