我在基于Sencha Touch 2的移动应用程序中设计了一个类似按钮的普通链接,而且我在iPhone上的Safari中大部分链接都无法正常运行。
该链接是一个普通的<a>
标记,其内部<span>
元素包含标签文本。 <a>
元素上有填充,允许注册点击。看来内部<span>
阻止了点击在父锚中作为链接点击注册,其背景是透明的。
这是标记:
<a href="http://test-site.xx/full-site-page?param=value" class="x-button-normal x-button btn-profile">
<span class="x-button-label">View profile on full site</span>
</a>
在Chrome中测试此功能不会出现任何问题,即单击跨度会导致遵循父超链接。两者都是基于Webkit的浏览器。我们的一位测试人员也在Safari上用Macbook测试了这一点,没有任何问题;我也使用Wacom Bamboo平板电脑在Chrome中对此进行了测试,没有任何问题。这只是移动设备上的一个问题(在iPhone和Android 2.2上都经过测试) - 这就是我们的目标。
我可以在<span>
元素上设置一个CSS属性,以允许点击通过父超链接吗?理想情况下,我希望避免通过JavaScript设置事件。关于为什么这不符合我期望的任何想法?
更新:以下是Chrome开发者控制台报告的内部范围的样式:
-webkit-box-align: center;
-webkit-box-flex: 1;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-user-drag: none;
-webkit-user-select: none;
background-attachment: scroll;
background-clip: border-box;
background-color: transparent;
background-image: none;
background-origin: padding-box;
border-bottom-color: white;
border-bottom-style: none;
border-bottom-width: 0px;
border-left-color: white;
border-left-style: none;
border-left-width: 0px;
border-right-color: white;
border-right-style: none;
border-right-width: 0px;
border-top-color: white;
border-top-style: none;
border-top-width: 0px;
box-shadow: none;
box-sizing: border-box;
color: white;
cursor: auto;
display: inline;
font-family: 'Helvetica Neue', HelveticaNeue, Helvetica-Neue, Helvetica, 'BBAlpha Sans', sans-serif;
font-size: 18px;
font-weight: bold;
height: auto;
line-height: 21px;
overflow-x: hidden;
overflow-y: hidden;
padding-bottom: 0px;
padding-left: 0px;
padding-right: 0px;
padding-top: 0px;
position: static;
text-align: center;
text-decoration: none;
text-overflow: ellipsis;
white-space: nowrap;
width: auto;
非常感谢。
答案 0 :(得分:10)
解决了这个问题,感谢this post提到了以下CSS属性:
pointer-events: none;
将其添加到内部<span>
(以及我的第二条评论中提到的内部浮动<img>
)的样式中,允许这些样式将点击传递给父超链接。
奇怪的是,Sencha Touch 2似乎干扰了DOM,不确定它是什么特别的。在完全静态的HTML页面上模拟类似风格的按钮(没有JavaScript,更不用说Sencha Touch 2)在移动设备上没有出现原始问题。
简单情况下的另一个选项(单<span>
,没有浮动图像)是重构样式以消除内部<span>
的需要,尽管这对于更复杂的情况是不可行的:
<a class="attachment" href="/someRepository/someDownload.pdf">
<img src="/images/fileExtension-pdf.png" alt="Attachment"/>
<span class="title">Title of download</span>
<span class="size">xxx kB</span>
</a>
答案 1 :(得分:0)
我认为这与Sencha Touch防止变焦有关。他们在代码中添加了防止默认大多数touchstart事件(这会阻止使用链接)。锚点有一个例外,但对于锚点的子节点则不然(因此点击锚点本身可以正常工作,但不能点击锚点内的跨度)。我能够在我的应用程序启动方法中修补quickfix:
Ext.Viewport.setPreventZooming(false); // unbind any existing handler
Ext.Viewport.doPreventZooming = Ext.Function.createInterceptor(Ext.Viewport.doPreventZooming, function(e){
return !Ext.fly(e.target).findParent('a');
});
Ext.Viewport.setPreventZooming(true);
上面的代码没有保修(没有在Android上测试过,我怀疑它效率很低)。我还将此报告为错误:http://www.sencha.com/forum/showthread.php?215032-Links-are-prevented-when-tapping-on-children