2012-03-15 65 views
1

我试图做一个基于touchBase的HTML应用程序,并且正在iPad 2上测试它。但是,HTML中的自定义属性似乎存在一些问题。javascript getAttribute()在iPad2上不起作用Safari

这里是我的代码

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>Insert title here</title> 
<script type="text/javascript"> 

document.addEventListener('mouseup',onTouchReleased, true); 
document.addEventListener('touchend',onTouchReleased, true); 

function onTouchReleased(e) { 
// Capture the event 
if(e.preventDefault) 
    e.preventDefault(); 
if(e.stopPropagation) 
    e.stopPropagation(); 
console.log(e.target); 
console.log(e.target.getAttribute("itemindex")); 
} 
</script> 
</head> 
<body> 
<img itemindex="0" src="video.jpg"/> 
<div itemindex="1">HELLO1</div> 
<p itemindex="2">HELLO2</p> 

</body> 
</html> 

当我在我的电脑上的Chrome/Safari浏览器中运行它,我能看到正确的itemindex在控制台时,我的项目点击。

但是,iPad2的,我得到的<img>itemindex0,这是正确的,但如果divp的的ItemIndex会返回一个错误。

类型错误:表达式“e.target.getAttribute”的结果[未定义]是不是一个函数

有人能解释这个请,也见识一下任何可用的解决方法。

回答

2

对于触控设备,您需要使用touchend而不是mouseup事件。

基于触摸的设备不支持多鼠标事件,如mouseupmousedownmousemovemouseovermouseout但支持click事件。您也可以使用click事件来尝试您的代码。

更新

如果需要使用elementFromPoint功能

例如将事件附加到document你可以用下面的代码片段:

function onTouchReleased(e) { 
    // Capture the event 
    if(e.preventDefault) 
     e.preventDefault(); 
    if(e.stopPropagation) 
     e.stopPropagation(); 
    var touch = e.touches[0]; 
    var pointTarget = document.elementFromPoint(touch.pageX, touch.pageY); 
    console.log(pointTarget); 
    console.log(pointTarget.getAttribute("itemindex")); 
} 
+0

我这样做;-)对不起,我忘了把它放在第一个编辑中,现在我已经添加了该行。 – Tirtha 2012-03-15 11:43:56

+0

您是否尝试将事件附加到特定元素,而不是文档? – antyrat 2012-03-15 11:45:48

+0

我现在做了.'document.getElementById(“divElement”)。addEventListener('mouseup',onTouchReleased,true); (“divElement”)。addEventListener('touchend',onTouchReleased,true); '和'

HELLO1
'但它仍然是相同的 – Tirtha 2012-03-15 11:58:44