2009-06-11 24 views
5

我有一個表格,當用戶點擊每個單元格時,一些細節應該出現在用戶點擊的小型彈出窗口中。我正在使用JQuery,但不是將函數綁定到onclick事件。event.pageX - 在未通過JQuery綁定的函數中使用JQuery事件?

function detailPopup(cell, event, groupName, groupID, ...) 
{ 
    var newDiv = document.createElement("div"); 
    newDiv.id = "detailPop" + groupID; 
    newDiv.className = "priceDetailPopup"; 
    newDiv.innerHTML = "<p>" + groupName + "</p>"; // more will go here 
    $(newDiv).click(function() 
     { 
      $(this).fadeOut("fast").remove(); 
     } 
    ); 
    $("#main").append(newDiv); 
    $(newDiv).css({"left" : event.pageX, "top" : event.pageY}).fadeIn("fast"); 
} 

在FF,Safari和Chrome中一切正常。在IE中,除了detail div出現在表格下方之外,它都可以工作。 event.pageX/Y不工作。我知道jQuery將修復這些對於IE,如果我通過JQuery的綁定功能是這樣的:

$(cell).click(function(e) { ... e.pageX ... }) 

但我不能這樣做。 (我不認爲我可以 - 如果你這樣做,請解釋我如何在該函數中獲得六個變量,而不必在單元格中使用非xhtml標記。)

有沒有辦法讓JQuery「修復「沒有通過JQuery綁定函數的事件對象? $ JQuery.fixEvent(事件);或者其他的東西?在他們的網站上我找不到任何參考資料。

非常感謝提前。

回答

12
e = jQuery.event.fix(e); //you should rename your event parameter to "e" 

我通過jQuery的源代碼中搜索中發現的fix功能。

或者,你可以使用它來獲得鼠標座標沒有 jQuery的...

var posx = 0; 
var posy = 0; 
if (!e) var e = window.event; 
if (e.pageX || e.pageY) { 
    posx = e.pageX; 
    posy = e.pageY; 
} 
else if (e.clientX || e.clientY) { 
    posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; 
    posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; 
} 

通過PPK:http://www.quirksmode.org/js/events_properties.html

+0

這有效,但我希望有一種方法可以使用jQuery的現有功能。 – 2009-06-12 22:08:27

+0

嗯,我更新了我的答案:) – 2009-06-12 23:33:05

-1

你可能會發現,你所面臨的問題不是定位問題。根據您發佈的語法,您可能遇到與使用CSS ID選擇器相關的IE錯誤。

$("#main").append(newDiv); 

如果IE不能識別「#main」元素,則append()函數將無法正常工作。 IE(v7之前版本)對ID(#)選擇器有專門的支持。請嘗試:

$('div[id="main"]').append(newDiv); 

試試這個,讓我知道它是如何工作的。