在實(shí)現(xiàn)某些功能, 例如只在某 DIV 上面彈出右鍵菜單的時(shí)候, 這個(gè)函數(shù)可以用一下(忘了從哪里看到以及改造的..抱歉), 僅供參考用, 用一些 JS 組件庫(kù)應(yīng)該可以更方便的實(shí)現(xiàn):
// Discover browser info {{{
var browserInfo = new Object();
var sAgent = navigator.userAgent.toLowerCase() ;
browserInfo.IsIE = ( sAgent.indexOf("msie") != -1 ) ;
browserInfo.IsGecko = !browserInfo.IsIE ;
browserInfo.IsSafari = ( sAgent.indexOf("safari") != -1 ) ;
browserInfo.IsNetscape = ( sAgent.indexOf("netscape") != -1 ) ;
// End of browser info }}}
/**
* Check if the event is happent in the element.
* @param event - event object
* @param element - the element of the document
*
* @author beansoft
* @version 1.0 2006-04-30
*/
function checkEventIn(event, element)
{
if(!event) {
event = window.event;
}
var e;
if(browserInfo.IsGecko) {
e = event.target;
} else {
e = event.srcElement;
}
while ( e )
{
if ( e == element ) return true;
e = e.parentNode ;
}
return false;
}
下面是一個(gè)判斷只有在某組件(組件名為‘父組件‘)點(diǎn)擊了鼠標(biāo)右鍵后才彈出自定義菜單的代碼(彈出菜單為一個(gè) ID 為 popup 的 DIV, 在其他地方則只彈出瀏覽器自帶菜單的示例代碼:
var oncontextmenu = function(e)
{
// Make sure popup only displays on codeman_js_tree
if(checkEventIn(e, $(‘父組件‘)) == false) {
return;
}
if(!e) {
e = window.event;
}
if(browserInfo.IsGecko) {
try {
e.preventDefault();
} catch(ex) {
}
}
$(‘popup‘).style.left = e.clientX + ‘px‘;
$(‘popup‘).style.top = e.clientY + ‘px‘;
$(‘popup‘).style.display = "";
return false;
};
// IE
try {
$(‘父組件‘.oncontextmenu = oncontextmenu;
} catch(ex) {
}
// Gecko
if(browserInfo.IsGecko) {
try {
$(父組件‘).addEventListener(
‘contextmenu‘, oncontextmenu, true);
} catch(ex) {
}
}