2009-06-11 3 views
5

Ich habe eine Tabelle, und wenn der Benutzer auf jede Zelle klickt, sollten einige Details in einem kleinen Popup-Teil angezeigt werden, der dort erscheint, wo der Benutzer geklickt hat. Ich benutze JQuery, aber nicht um die Funktion an das onclick-Ereignis zu binden.event.pageX - Verwenden Sie JQuery Event in einer Funktion, die nicht durch JQuery gebunden ist?

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"); 
} 

Alles funktioniert wunderbar in FF, Safari und Chrome. Im IE funktioniert alles, außer dass das Detail-Div unterhalb der Tabelle erscheint. event.pageX/Y funktionieren nicht. Ich weiß, JQuery wird die für IE beheben, wenn ich die Funktion durch JQuery wie diese binden:

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

Aber ich kann das nicht tun. (Ich glaube nicht, dass ich das kann - wenn Sie das tun, bitte erläutern Sie, wie ich sechs Variablen in diese Funktion bekommen kann, ohne nicht-xhtml-Tags in der Zelle zu verwenden.)

Gibt es eine Möglichkeit, JQuery "reparieren zu lassen "das Ereignisobjekt, ohne die Funktion über JQuery zu binden? $ JQuery.fixEvent (Ereignis); oder so? Ich kann keinen Hinweis darauf finden, dies auf ihrer Website zu tun.

Vielen Dank im Voraus.

Antwort

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

Ich fand die fix Funktion durch den Quellcode jQuery suchen.

Alternativ können Sie diese verwenden, die Maus-Koordinaten ohne jQuery zu erhalten ...

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; 
} 

Via PPK: http://www.quirksmode.org/js/events_properties.html

+0

Das funktioniert, aber ich hoffe, dass es eine Möglichkeit gibt, die vorhandenen Funktionen von jQuery zu verwenden. –

+0

Mmmmk Ich habe meine Antwort aktualisiert :) –

+0

Das war's! Zwei großartige Antworten in einem. Vielen Dank! –

-1

Sie können feststellen, dass das Problem, das Sie mit Blick sind kein Positionierung Problem überhaupt. Je nach der von Ihnen veröffentlichten Syntax tritt möglicherweise ein IE-Fehler auf, der sich auf die Verwendung des CSS-ID-Selektors bezieht.

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

Wenn IE das "#main" Element nicht erkennt, die append() Funktion wird nicht korrekt funktionieren. IE (pre-v7) hat fleckige Unterstützung für den ID (#) Selektor. Versuchen Sie stattdessen:

Versuchen Sie dies und lassen Sie mich wissen, wie es für Sie funktioniert.

+0

Danke, aber das tut es nicht. event.pageX/Y sind definitiv undefiniert. Ich habe das bestätigt, indem ich sie alarmiert habe. –

+0

Die Verwendung der ID ist der einfachste Weg, um ein Element zu erhalten, und es wurde seit alten Versionen von IE unterstützt. Es gibt keine Möglichkeit, dass IE dies vermasselt. Stellen Sie entweder einen Link zur Verfügung, der Ihren Anspruch sichert, oder ich rufe BS an! –

+0

Ich habe nicht gesagt, dass es nicht unterstützt wurde. Ich sagte, es habe eine fleckenhafte Unterstützung. Und ich nehme nicht an, dass der Beispielcode der Asker-Posts der genaue Code aus dem Projekt ist. (In der Regel ist es zur öffentlichen Anzeige und Vereinfachung aufgeräumt) http: //reference.sitepoint.com/css/idselector "In Internet Explorer 6 wird ein ID-Selektor ignoriert, es sei denn, es handelt sich um den letzten ID-Selektor im einfachen Selektor". Die Symptome hier scheinen konsistent zu sein, dass das Element inline gezeichnet wird und nicht an ein vorhandenes Element "angehängt" wird. Es war einen Versuch wert. Entschuldigung, es war nicht die einfache Lösung, die ich für dich erhofft habe, Scott. –