【问题标题】:Converting onClick methods over to tap methods in Zepto在 Zepto 中将 onClick 方法转换为 tap 方法
【发布时间】:2012-05-17 06:33:29
【问题描述】:

是否有一种简单的方法可以在移动网络应用上重新编写链接,从 onclick 到使用 Zepto 轻敲?目前我想为每个 onclick 实例触发 $.tap 命令。

例如

<a href="#" tap="doSomething(); return false;">Link</a>

这可能吗,还是有办法阻止 onclick 触发,但采用 onclick 方法并在 $.tap 方法中调用它?

对于使用 Zepto 制作快速按钮有什么建议吗?

【问题讨论】:

  • 当你点击 .trigger('onclick') 的时候
  • 是的 - 但是如何防止 onclick 在点击时触发?
  • 你的意思是有没有办法禁止它进入链接?或者是否有您不想触发的 onclick 功能?
  • 我的意思是我不希望 onclick 在点击时触发,我想通过 zepto 在“tap”上触发 onclick 功能。
  • 所以基本上点击右键就会运行onclick功能?他们都做同样的事情,除了一个是当你点击的时候,另一个是当你点击正确的时候?所以当你点击屏幕时,触发 onclick 功能,因为它们做同样的事情。现在,如果您不希望它转到链接,则只需在锚点单击时返回 false。

标签: javascript jquery mobile webkit zepto


【解决方案1】:

更优雅的方法是将点击触发器存储在一个变量中,然后在处理触摸屏设备时将该变量从“click”重新映射到“touchstart”。

在这里,我使用一个全局对象变量 myUtils 来存储我的点击事件,它的值默认为“点击”:

var myUtils = myUtils || {};
myUtils.events = myUtils.events || {
  click : "click"
};

如果检测到触摸屏,则将 myUtils.events.click 属性更改为“touchstart”值:

if (typeof document.body.ontouchstart !== "undefined") {
  myUtils.events.click = "touchstart";
}

现在,当我将点击事件绑定到我的元素时,我使用 myUtils.events.click 属性作为事件名称:

$(function() {
   $("#link").bind(myUtils.events.click, function(e) {
     alert("I'm a " + e.type);
     e.preventDefault();
   });
});​

这样我只需要做“它是触摸屏吗?”在我的应用程序中测试一次,之后我将根据需要绑定到“touchstart”或“click”。我不必担心取消移动设备上不需要的点击事件,因为该事件从一开始就没有绑定。

e.preventDefault() 调用将阻止链接被跟踪(假设#link 是一个href 链接)。

JSFiddle 版本:http://jsfiddle.net/BrownieBoy/Vsakw/

请注意,此代码假定触摸屏设备是触摸屏设备;即手机或平板电脑。如果您使用的是触摸屏 PC,那么您将无法使用鼠标使用它!

【讨论】:

    【解决方案2】:

    好吧,我理解您的方式是您希望在移动设备和桌面设备上具有不同的行为,但使用相同的代码。如果是这样,那么您需要确定您所在的平台然后定义您的代码

    if(MOBILE) {
        $('element').click(function(){
            return false;
        });
    
        $('element').on('touchstart', function(){
            // functionality of the onclick written here
        });
    }
    else {
    // desktop event listeners
    }
    

    【讨论】:

    • 对 - 但我有需要触发的哈希片段,例如 Page One - 我仍然希望它改变 URL。 return false 是否会使该 url 更改无效?
    • 请避免使用live...改用on
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2016-03-15
    • 2011-04-25
    • 2014-11-24
    相关资源
    最近更新 更多