此功能可在IE,Firefox和Chrome上完美运行,但在iPhone上,只有在点击<img>
时才有效。点击页面(在img上的任何地方)都不会触发事件。
$(document).ready(function () {
$(document).click(function (e) {
fire(e);
});
});
function fire(e) { alert('hi'); }
HTML部分非常基础,不应该是一个问题。
有什么想法吗?
答案 0 :(得分:244)
简答:
<style>
.clickable-div
{
cursor: pointer;
}
</style>
更长的回答:
重要的是要意识到如果你只是使用<a>
标签,一切都会按预期工作。您可以在iPhone上的常规<a>
链接上错误地点击或拖动,一切都像用户期望的那样。
我认为您有任意不可点击的HTML - 例如包含无法用<a>
包装的文本和图像的面板。当我有一个我希望完全可点击的面板时,我发现了这个问题。
<div class='clickable-div' data-href="http://www.stackoverflow.com">
... clickable content here (images/text) ...
</div>
要检测此div中任何位置的单击,我使用的jQuery具有data-href
html属性,如上所示(此属性由我自己发明,不是标准的jQuery或HTML数据属性。)
$(document).on('click', '.clickable-div', function() {
document.location = $(this).data('href');
});
无论您点击多少,这都适用于您的桌面浏览器,但不适用于iPad。
您可能想要将事件处理程序从click
更改为click touchstart
- 这确实会触发事件处理程序。但是,如果用户想要向上拖动页面(滚动),它们也会触发它 - 这是一种糟糕的用户体验。 [你可能已经注意到偷偷摸摸的横幅广告的这种行为]
答案非常简单:只需设置css cursor: pointer
即可。
<style>
.clickable-div
{
cursor: pointer;
}
</style>
这为桌面用户提供了额外的好处,可以通过手形图标指示该区域是可点击的。
答案 1 :(得分:30)
改变这个:
$(document).click( function () {
到此
$(document).on('click touchstart', function () {
也许这个解决方案不适合您的工作,并且如回复中所述,这不是最佳解决方案。请检查其他用户的其他修复程序。
答案 2 :(得分:28)
添加以下代码。
问题是iPhone不会引发点击事件。他们提出“触摸”事件。非常感谢苹果。为什么他们不能像其他人一样保持标准?无论如何,感谢Nico的提示。
感谢:http://ross.posterous.com/2008/08/19/iphone-touch-events-in-javascript
$(document).ready(function () {
init();
$(document).click(function (e) {
fire(e);
});
});
function fire(e) { alert('hi'); }
function touchHandler(event)
{
var touches = event.changedTouches,
first = touches[0],
type = "";
switch(event.type)
{
case "touchstart": type = "mousedown"; break;
case "touchmove": type = "mousemove"; break;
case "touchend": type = "mouseup"; break;
default: return;
}
//initMouseEvent(type, canBubble, cancelable, view, clickCount,
// screenX, screenY, clientX, clientY, ctrlKey,
// altKey, shiftKey, metaKey, button, relatedTarget);
var simulatedEvent = document.createEvent("MouseEvent");
simulatedEvent.initMouseEvent(type, true, true, window, 1,
first.screenX, first.screenY,
first.clientX, first.clientY, false,
false, false, false, 0/*left*/, null);
first.target.dispatchEvent(simulatedEvent);
event.preventDefault();
}
function init()
{
document.addEventListener("touchstart", touchHandler, true);
document.addEventListener("touchmove", touchHandler, true);
document.addEventListener("touchend", touchHandler, true);
document.addEventListener("touchcancel", touchHandler, true);
}
答案 3 :(得分:17)
尝试此操作,仅适用于iPhone和iPod,因此您无法在Chrome或Firefox移动设备上将所有内容变为蓝色;
/iP/i.test(navigator.userAgent) && $('*').css('cursor', 'pointer');
基本上,在iOS上,事情不是可点击的&#34;默认情况下 - 他们可以触摸&#34; (pfffff)所以你让它们可以点击&#34;通过给它们一个指针光标。总的来说,对吧?
答案 4 :(得分:2)
CSS Cursor:Pointer;
是一个很好的解决方案。 FastClick https://github.com/ftlabs/fastclick是另一种解决方案,如果您因某种原因不想要Cursor:Pointer;
,则不需要您更改css。我现在使用fastclick来消除iOS设备上300ms的延迟。
答案 5 :(得分:1)
在移动iOS上,点击事件不会冒泡到文档正文,因此无法与.live()事件一起使用。如果必须使用非本机可点击元素(如div或section),则在css中使用 cursor:pointer; 表示非悬停在相关元素上。如果这很难看,你可以查看delegate()。
答案 6 :(得分:0)
使用jQTouch代替 - jQuery的移动版
答案 7 :(得分:0)
将此信息包含在您的项目中。检查&#34;自述文件&#34;在github上。 https://github.com/tomasz-swirski/iOS9-Safari-Click-Fix