判断事件是不是发生在某组件中的 JS 函数

在实现某些功能, 例如只在某 DIV 上面弹出右键菜单的时候, 这个函数可以用一下,供参考用, 用一些 JS 组件库应该可以更方便的实现:

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

 

下面是一个判断只有在某组件(组件名为'父组件')点击了鼠标右键后才弹出自定义菜单的代码(弹出菜单为一个 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) {
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值