2012-10-11 31 views
0

我有,我想一旦用户就书签到他们的设备的主屏幕上显示为一个独立的web应用程序。我一直在iPhone 5上进行测试。我使用元标记使其显示为一个Web应用程序和一些jQuery来处理点击事件,将所有链接保持在独立状态,并阻止他们启动Mobile Safari。这一切都很好,直截了当,直到我试图将一些无聊的文本链接变成图像链接。 preventDefault()操作似乎无法处理图像链接,并且始终返回'The requested URL/undefined was not found on this server。',而文本链接和标准表单按钮正常工作。 这是学校合作项目的一部分,我们需要它拥有一个时髦的界面,图像链接是其中的一个重要部分。的Web应用程序 - 不与图像工作环节

下面是简单的js我必须处理的链接:

$(document).on(
    "click", 
    "a", 
    function(event){ 
     event.preventDefault(); 
     location.href = $(event.target).attr("href"); 
    } 
); 

按钮HTML看起来像这样:

<div id="loginBtn"><a href="memberLogin.php"><img src="CSS images/0-btn1.png" width="224" height="113" /></a></div> 

任何建议,将不胜感激。

+1

在iOS上的活动停止在'body'冒泡。无论如何,您不应该将事件监听器附加到“文档”中......将委派的处理程序尽可能贴近目标。 – ahren

+0

我很抱歉,如果这是一个非常明显的事情 - 我的工作是项目的PHP/SQL部分,但我现在正在帮助这方面。如果我需要它来处理整个项目中的所有链接,我不应该将它附加到“文档”中? – feen

回答

0

某些事件泡沫从目标元素向上穿过每一父节点,直到他们到达的文件(或身体的iOS)的顶部 - 所以,如果你在文档级处理它们是非常低效。委托事件处理程序适用于动态生成的内容,因此您可以在处理程序创建时将处理程序附加到DOM中最近的父级。在你的情况下(如果你没有一个标签是动态生成的),你可以做$('a').on(...)

你还需要使用event.stopPropagation();来防止一旦保存到主屏幕后在移动Safari浏览器中打开应用程序。

+0

图片链接现在所有的工作!不幸的是,他们在Mobile Safari中推出,这是我最初避免的。 – feen

+0

你希望他们推出什么?你不是使用Mobile Safari吗? – ahren

+0

我是技术上的,但是一旦它被标记为主屏幕,它应该在顶部和底部没有Safari网址栏和按钮栏 - 仅显示状态栏。 js停止了从这个显示中断的链接,并在Mobile Safari中启动新页面,但它已经回到了这个过程。 – feen

0

立即而不是仅具有一个元素一个使用图像使得两个元件一个IMG。所以我认为这与event propagationPreventDefault有关。 实际上,preventDefault只会阻止默认操作,但不会阻止其传播。看看这些链接,他们会明确帮助你。