2012-03-15 67 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