2009-06-11 2 views
5

나는 테이블을 가지고 있으며 사용자가 각 셀을 클릭하면 사용자가 클릭 한 곳에 나타나는 작은 팝업 div에 몇 가지 세부 정보가 나타납니다. 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에서는 세부 사항 div가 표 아래에 나타나는 것을 제외하고는 모두 작동합니다. event.pageX/Y가 작동하지 않습니다. 내가 같이 JQuery와 통해 기능을 결합하면 JQuery와 IE에 대한 그 문제를 해결 알고 :

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

하지만 그렇게 할 수 없습니다. (내가 할 수 있다고 생각하지 않는다. 셀에 xhtml 태그를 사용하지 않고 6 개의 변수를 그 함수에 넣을 수있는 방법을 설명해주세요.)

JQuery를 사용할 수있는 방법이 있습니까? "JQuery를 통해 함수를 바인딩하지 않고 이벤트 객체를? $ JQuery.fixEvent (event); 또는 뭔가? 나는 그들의 사이트에서 이렇게하는 것에 대한 어떤 언급도 찾을 수 없다.

미리 감사드립니다.

답변

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의 기존 기능을 사용할 수있는 방법이 필요합니다. –

+0

Mmmmk 내 대답을 업데이트했습니다 : –

+0

그게 전부 야! 하나에 두 가지 큰 대답. 감사! –

-1

당신이 직면하고있는 문제가 아니라는 것을 찾을 수 있습니다 위치 문제. 게시 한 구문에 따라 CSS ID 선택기 사용과 관련된 IE 버그가 발생할 수 있습니다.

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

IE가 "#main"요소를 인식하지 못하면 append() 함수가 올바르게 작동하지 않습니다. IE (pre-v7)는 ID (#) 선택기에 대한 얼룩덜만한 지원을 제공합니다. 대신 다음을 입력하십시오.

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

시험해보고 사용 방법을 알려주세요.

+0

고마워요.하지만 그렇게하지는 않습니다. event.pageX/Y는 확실히 정의되지 않았습니다. 나는 그들을 경고함으로써 그것을 확인했다. –

+0

ID를 사용하는 것이 요소를 가져 오는 가장 쉬운 방법이며, 골동품 버전의 IE부터 지원되었습니다. IE가 이것을 망쳐 놓을 방법은 없습니다. 청구를 뒷받침하는 링크를 제공하거나 BS에 전화 중입니다! –

+0

나는 그것이 지원되지 않는다고 말하지 않았다. 나는 반점이 있다고 말했다. 그리고 저는 asker가 게시 한 샘플 코드가 프로젝트의 정확한 코드라고 추정하지 않습니다. (일반적으로 공용 디스플레이 및 단순화를 위해 정리 됨) http : //reference.sitepoint.com/css/idselector "Internet Explorer 6에서 ID 선택기는 단순 선택기의 마지막 ID 선택기가 아닌 한 무시됩니다." 여기서 나타나는 증상은 인라인으로 그려지는 요소와 기존 요소에 "붙어 있지"않은 것으로 보입니다. 그것은 가치가 있었다. 미안해, 너를 위해서 내가 원하는 바보가 아니야, 스캇. –

관련 문제