分享

判断事件是不是发生在某组件中的 JS 函数 - BeanSoft‘s Java Blog ...

 ShangShujie 2007-04-25

 

在实现某些功能, 例如只在某 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) {
}

}

posted on 2007-04-24 16:56 BeanSoft 阅读(429) 评论(4)  编辑 收藏 引用 所属分类: Web

评论:
# re: 判断事件是不是发生在某组件中的 JS 函数 2007-04-24 17:11 | BeanSoft
不好意思漏了:
/*
Fetch a DOM object based on it‘s id
objId - a object‘s id string
*/
function $(objId) {
return document.getElementById(objId);
}

完全可以用 Prototype 里面的 $ 代替.  回复  更多评论
  
# re: 判断事件是不是发生在某组件中的 JS 函数 2007-04-25 16:01 | 交口称赞
在么,问个问题
你知道JBOSS怎么在一个服务器下,通过不同的端口对应不同的项目。比如我起一个服务器,8080对应test 8081对应另一个test
  回复  更多评论
  
# re: 判断事件是不是发生在某组件中的 JS 函数 2007-04-25 16:07 | BeanSoft
我知道 JBoss 可以整合 Tomcat, 所以我就以 Tomcat 为例, Tomcat 只需要修改 conf/server.xml 就可以实现监听多个端口以及每个端口映射到不同的应用目录的目的, 举个例子:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
...
<Engine name="Catalina" defaultHost="localhost">
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

</Host>
注意:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

这里可以加入多个 Host, Connector 也可以多个, 只不过注意新的 Connector 里面的 Host 里面的 appBase 不能都放到一个地方, 就可以了. 具体没有试过, 但是看过相关的资料.  回复  更多评论
  
# re: 判断事件是不是发生在某组件中的 JS 函数 2007-04-25 16:30 | 交口称赞
ok,多谢,理论上jboss是和tomcat是一样的
多谢啦,我去试试  回复  更多评论

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约