2009-06-11 7 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では、detail 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" 

私は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 ...マウスはjQueryのなしを座標取得するためにこれを使用することができます:http://www.quirksmode.org/js/events_properties.html

+0

これはうまくいきますが、jQueryの既存の機能を使用する方法があることを期待しています。 –

+0

Mmmmk私の答えを更新しました:) –

+0

それです! 1つには2つの大きな答えがあります。ありがとう! –

-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

私はそれがサポートされていないとは言わなかった。私はそれが不自然なサポートをしていると言った。そして私は、尋問者が投稿したサンプルコードがプロジェクトの正確なコードであるとは思わない。 (通常は公開表示と簡略化のためにクリーンアップされています)http://reference.sitepoint。com/css/idselector "Internet Explorer 6では、IDセレクタは単純セレクタの最後のIDセレクタでない限り無視されます。ここでの症状は、インラインで描かれ、既存の要素に「付着」されていない要素と一貫していたようです。それはショットの価値があった。申し訳ありませんが私はあなたのために望んでいた単純な修正ではなかった、スコット。 –

関連する問題