Mobile Safari和jQuery事件,没有触发?

问题描述 投票:5回答:2

我有一个用HTML5 / JavaScript编写的用于车载仪表板的应用程序。这是一个“单页”应用程序,响应于不同事件,将片段加载到主页的div中。

我被要求将其移植到浏览器,以便可以用于市场营销,演示等。

这似乎没什么大不了的,因为几乎没有什么适应性的,只需要调整一些CSS,以便在所有浏览器中都可以相同地显示。然后,他们决定要在其上运行webapp的设备为iPad。

该应用程序在Safari上运行良好,因此我认为Mobile Safari不会出现任何问题。立刻意识到情况并非如此。该应用程序在Mobile Safari中根本无法使用!基本上,没有任何点击事件触发。最重要的是,我的控制台中出现了不一致的错误消息,这些错误消息不会在任何其他浏览器中显示。

TypeError:'null'不是对象

在这个站点上,我看到关于哪些jQuery绑定有效,哪些Mobile Safari有效以及哪些无效的报告。因此,我决定建立自己的实验。

使用单个链接创建页面:

<a class="mylink">CLICK ME</a>

然后我尝试了每个绑定:

$("a.mylink").click(function () { console.log("click worked"); });
$("a.mylink").bind("click", function () { console.log("bind worked"); });
$("a.mylink").live("click", function () { console.log("live worked"); });
$("a.mylink").on("click", function () { console.log("on worked"); });

我唯一从控制台得到任何响应的是.live()。即便如此,它还是非常不一致,通常涉及通过点击向其发送垃圾邮件。

如果我编辑链接并添加onclick属性,例如:

<a onclick="function(){}" class="mylink">CLICK ME</a>

然后.live()始终工作,但是仍然没有其他绑定。对我来说,这似乎很疯狂,因为许多应用程序都可以在Mobile Safari上运行。有什么明显的我想念的地方吗?

[注意,我知道如何使用jQuery,所以在有人问之前,是的,我的绑定位于$(document).ready()内。另外,我知道链接一旦附加了href就可以正常工作,但是显然这不是我所需要的,因为这是一个单页导航应用程序,附加href似乎会完全忽略iOS中的所有绑定并导致完整页面导航。

jquery html ios mobile-safari jquery-events
2个回答
10
投票

您必须添加href="#"或将cursor:pointer放入要单击的元素。

这是测试(在iPad 3中:http://jsfiddle.net/dZqyU/2/

<a class="clickable">I have no href :( (I dont work in iPad)</a>
<br/>
<br/>
<a class="clickable" href="#">I have href :) (I work in iPad)</a>
<br/>
<br/>
<a class="clickable cursor">I have cursor, no href :) (I work in iPad)</a>

$(document).on('click','.clickable',function(){
    alert($(this).text() + 'and the binding worked :)');
});

.cursor{
cursor:pointer;
}

我猜这个问题就像没有某些a属性的href锚标记没有被某些iOS Safari版本识别为可点击元素。但是,如果我们通过添加clickable或添加游标href明确地使它们成为pointer,则它可以工作。 Here is a related link


1
投票

先前的答案指出的错误。我进行了测试,仅使用iPhone上的bind,就可以在没有内置JavaScript的情况下实现您要实现的目标。我的猜测是,您的某个地方有一些错字,并且由于jQuery神奇地降级的神奇能力,因此不会出现错误。

假设我对错误的描述不正确,您可以尝试做的一件事是将href =“#”添加到锚点,然后使用event.preventDefault()[并且您可能还需要添加事件.stopImmediatePropagation()]转换为您的代码。

[您的代码中似乎有一个错误(可能完全不同且无关),台式机Safari足以帮助您找出并忽略或修复它,但移动Safari在我看来却不那么宽容了经验。

© www.soinside.com 2019 - 2024. All rights reserved.