2013-02-19 32 views
0

這是一個標籤內的onclick聽衆event.pageX和event.pageY未定義在IE7

onclick="showMap('change-img-box',event); return false;" 

這是jQuery的

function showMap(id,e){ 
var hpos = e.pageX, ypos = e.pageY; alert(hpos+'----'+ypos); 
if($("#"+id).is(":visible")){ 
    $("#"+id).hide(); 
}else{ 
    $("#"+id).css({"top": ypos+10, "left": hpos+10}).hide().fadeIn(300); 
} 
} 

不知道爲什麼,但IE 7說,這兩個hpos和ypos未定義。我怎樣才能解決這個問題。提前致謝。

+0

使用'clientX'和'clientY'在IE 8和下面訪問數據。 [更多信息](http://www.quirksmode.org/js/events_properties.html#position) – 2013-02-19 21:18:49

+1

如果您使用jQuery綁定事件處理程序而不是使用onclick屬性,則應自動跨瀏覽器對pageX和pageY進行規範化,儘管我最近還沒有測試過。 – 2013-02-19 21:22:37

+0

非常有幫助:http://www.quirksmode.org/js/events_properties.html。 – 2013-02-19 21:26:20

回答

2

由於您使用的jQuery已經,您可以使用jQuery而不是內嵌的onclick初始化Click事件。 jQuery的根據W3C標準(http://api.jquery.com/category/events/event-object/

$('#thing-you-are-clicking').click(function(e) { 
    var hpos = e.pageX, ypos = e.pageY; 
    // Do your stuff here... 
}); 

,如果你需要一個「身份證」的數據,你可以使用數據 - 把它放到你的按鈕的DOM *屬性,例如標準化的事件對象

<a href="#" id="thing-you-are-clicking" data-id="change-img-box">Hi</a> 

然後就可以使用。數據( '編號')

$('#thing-you-are-clicking').click(function(e) { 
    var hpos = e.pageX, ypos = e.pageY; 
    var id = $(this).data('id'); 
    // Do your stuff here... 
}); 
+0

這不完全是我所需要的,但它definilty給了我解決我的問題的想法。謝謝一堆 – 2013-02-19 22:58:07

3

舊版IE使用clientXclientY代替。下面是我使用的跨瀏覽器兼容的功能:

window.getMouseCoords = function(e) { 
    if(!e) return {x:0,y:0}; 
    if(e.pageX || e.pageY) { 
     return {x:e.pageX,y:e.pageY}; 
    } 
    if(e.clientX || e.clientY) { 
     return { 
      x:e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft, 
      y:e.clientY+document.body.scrollTop+document.documentElement.scrollTop 
     }; 
    } 
    return {x:0,y:0}; 
}; 
相關問題