KNOCKOUTJS "click"绑定在触摸设备上触发两次(iScroll问题)



我有一个用敲除构建的动态列表视图:

<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事件订阅的问题,但没有淘汰绑定:

  1. https://github.com/cubiq/iscroll/issues/270
  2. 如何解决两次触发的点击事件

线索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/

最新更新