javascript 一个方法莫名其妙的被调用2次???????

全能码农-ss 2010-07-06 10:55:44
我正在弄一个树. 写了个js方法. 莫名其妙的总是被调用2次
    function show(rootId,subId,imgId,idHidden,pathHidden){
alert("in show subId="+subId);
var outId = jQuery("#"+idHidden).val();
var path = jQuery("#"+pathHidden).val();
getTree(outId,rootId,subId,imgId,idHidden,pathHidden);
}

就是这个show方法,莫名其妙的被调用2次!



function getTree(outId,rootId,subId,imgId,idHidden,pathHidden){
alert("in getTree subId="+subId);
//alert(subId);
url ='<%=url%>';
url = url+"&outId="+outId;
jQuery.getJSON(url,function(json){
//alert("in getJSON");
if(json.result=="NO"){
}else{
var txt = "";
for(var i in json){
//alert(i);
var arr = json[i].split("$");
var li = "<li style=\"text-align:left;padding-left:20px\" id=\""+rootId+i+"\" onclick=\"show('"+rootId+i+"','"+subId+i+"','"+imgId+i+"','"+idHidden+i+"','"+pathHidden+i+"')\"><a href=\"#\"><img src=\"/html/images/tree/plus.gif\"/>";
li = li+arr[1];
//li = li+"<input id=\""+idHidden+i+"\" type=\"hidden\" value=\""+arr[0]+"\" />";
//li = li+"<input id=\""+pathHidden+i+"\" type=\"hidden\" value=\""+arr[2]+"\" />";
li = li+"</a></li>"
txt = txt+li;
}
alert(txt);
jQuery("#"+subId).html(txt);
EcpAjaxUtil.submitStyle(false);
}
});
}
...全文
767 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
全能码农-ss 2010-08-24
  • 打赏
  • 举报
回复
好几天没上, 结贴. ps 除了我自个的回答,每一个说到点上的. 散分吧
ruisheng_412 2010-07-06
  • 打赏
  • 举报
回复
推荐你用火狐 的插件 firebug调试一下吧
这样清楚一点
全能码农-ss 2010-07-06
  • 打赏
  • 举报
回复
找到原因了 "IE事件冒泡"



http://www.javaeye.com/topic/188640

取消事件冒泡,在 IE 的事件机制中,触发事件会从子元素向父元素逐级上传,就是说,如果子元素触发了单击事件,那么也会触发父元素的单击事件;event.cancelBubble=true;可以停止事件继续上传补充一点,Ie的事件传递是从下到上的:

事件来源对象->上级对象->上上级对象->.....->body->document->window

NS的事件传递是从上到下:

window->document->body->....->事件来源对象实例源码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>event.cancelBubble</title>
<style>
<!--
* {font:menu}
-->
</style>
</head>

<body>
<span onclick=alert("你好")>点我 <span>再点我</span></span><br><br>

<span onclick=alert("你好")>点我 <span onclick=event.cancelBubble=true;>再点我</span></span>
</body>

</html>
实例2:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh" xml:lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="developer" content="Realazy" />
<title>Bubble in JavaScript DOM--JavaScript 的事件冒泡 demo </title>
<style type="text/css" media="screen">
div * {display:block; margin:4px; padding:4px; border:1px solid white;}
textarea {width:20em; height:2em;}
</style>
<script type="text/javascript">
//<![CDATA[
function init(){

var log = document.getElementsByTagName('textarea')[0];
var all = document.getElementsByTagName('div')[0].getElementsByTagName('*');
for (var i = 0, n = all.length; i < n; ++i){
all[i].onmouseover = function(e){
this.style.border = '1px solid red';
log.value = '鼠标现在进入的是: ' + this.nodeName;
};
all[i].onmouseout = function(e){
this.style.border = '1px solid white';
};
}

var all2 = document.getElementsByTagName('div')[1].getElementsByTagName('*');
for (var i = 0, n = all2.length; i < n; ++i){

all2[i].onmouseover = function(e){
this.style.border = '1px solid red';
if (e) //停止事件冒泡
e.stopPropagation();
else
window.event.cancelBubble = true;
log.value = '鼠标现在进入的是: ' + this.nodeName;
};


all2[i].onmouseout = function(e){
this.style.border = '1px solid white';};


}


}
window.onload = init;
//]]>
</script>
</head>
<body>
<h1>Bubble in JavaScript DOM</h1>
<p>DOM树的结构是:</p>
<pre><code>
UL
- LI
- A
- SPAN
</code></pre>
<div>
<ul>
<li><a href="#"><span>Bubbllllllllllllllle</span></a></li>
<li><a href="#"><span>Bubbllllllllllllllle</span></a></li>
</ul>
</div>
<textarea></textarea>
<p>鼠标进入UL的任何一个子元素,如果不停止冒泡,我们从UL到SPAN都定义了鼠标悬停(<code>mouseover</code>)事件,这个事件会上升了UL,从而从鼠标所进入的元素到UL元素都会有红色的边。</p>
<div>
<ul>
<li><a href="#"><span>Bubbllllllllllllllle</span></a></li>
<li><a href="#"><span>Bubbllllllllllllllle</span></a></li>
</ul>
</div>
<p>如果停止冒泡,事件不会上升,我们就可以获取精确的鼠标进入元素。</p>
</body>
全能码农-ss 2010-07-06
  • 打赏
  • 举报
回复
上边的html代码中有调用show()这个方法,这个时候,是正常的

还有一处调用时在,1楼的getTree方法中. 生成下级目录的时候,也有个onclick 事件

只有在这个事件(getTree()方法生成的下级目录中的onclick事件) 时候,才会调用2次.

第一次是正常的,id都是下级的id,第二次,就变成了,都是上级的id(就是楼上贴的html中的id)
全能码农-ss 2010-07-06
  • 打赏
  • 举报
回复
<%
for(int i=0;i<orgs.size();i++){
Object[] org = (Object[])orgs.get(i);
%>
<li style="text-align:left;padding-left:15px" id="root<%=i%>" onclick="return show('root<%=i%>','sub<%=i%>','img<%=i%>','idHidden<%=i%>','pathHidden<%=i%>')">
<a href="#">
<img id="img<%=i%>" src="/html/images/tree/plus.gif"/>
<%=org[1].toString() %>
<input id="idHidden<%=i%>" type="hidden" value="<%=org[0].toString() %>" />
<input id="pathHidden<%=i%>" type="hidden" value="<%=org[2].toString() %>"/>
</a>
<ul id="sub<%=i%>"></ul>
</li>
<%} %>
happyredLi 2010-07-06
  • 打赏
  • 举报
回复
应该是循环的时候出现问题了
哈特中尉 2010-07-06
  • 打赏
  • 举报
回复
1.检查其它地方是否还有调用。
2.修改方法名再试试
3.会不会是A——B——A这种情况
Headsen 2010-07-06
  • 打赏
  • 举报
回复
你不要贴show的代码啊,show被调用了两次,和show方法体关系不大,除非递归啊。
把调用show的代码贴出来看看。
wula0010 2010-07-06
  • 打赏
  • 举报
回复
这个,要看你调用show()的地方,你这些和show运行两次有什么关系......
simaa0106 2010-07-06
  • 打赏
  • 举报
回复
嗯。是不是有2个地方调用了这个show();
izard999 2010-07-06
  • 打赏
  • 举报
回复
估计是调用有误吧
myhope88 2010-07-06
  • 打赏
  • 举报
回复
这问题确实挺奇怪的
ronniegxq 2010-07-06
  • 打赏
  • 举报
回复
不懂帮顶
代码下载地址: https://pan.quark.cn/s/8236006bf1f9 Word精灵插件:一款用于增强Microsoft Word功能的辅助软件,能够将多种复杂功能转化为插件形式,并在软件状态栏中进行展示,涵盖诸如批注管理、表格处理、内容替换、文档拆分、数学运算、字符提取、批量重命名等多项实用工具。在工作环境中应用该插件能够显著降低工作强度,提升操作效率。Word精灵插件兼容32位与64位的Microsoft Word版本,支持Word 2007、2010、2013以及Word 2016操作系统,但不适用于Word 2003版本。此外,该插件同样支持WPS办公软件。 功能概述: 1、表格自动调整宽度:自动优化文档内所有表格的显示宽度。 2、批量导出批注信息:将文档内所有批注集中导出到Excel工作簿中。 3、表格至Excel多表导出:在将表格导出到Excel时,每个Word表格将独立存放在一个工作表中,Word文档内的表格数量与Excel生成的工作表数量相等,并附有工作表目录。 4、表格至Excel单表导出:将文档内所有表格整合后导出到一个Excel工作表中,多个表格将按顺序排列于同一工作表内。 5、统一图片分辨率:对指定文件夹内的所有图片进行分辨率标准化处理。 6、图片批量缩放:依据设定比例对图片进行放大或缩小,支持按百分比调整。 7、图片批量插入:将图片批量插入到当前文档,可选择图片名称的展示形式,并设定图片的高度。 8、图片格式统一转换:将指定文件夹内的所有图片转换为相同的文件格式。 9、内容批量替换:对文档内容、页眉及页脚执行批量替换操作,例如将数字1替换为字母A,数字2替换为字母B,数字3替换为字母C等。 10、图片批量导出:将文档内所...
打开链接下载源码: https://pan.quark.cn/s/245ca7a27256 OmniGraffle是一款效能卓越的图形设计软件,在构建图表、流程图以及组织结构图等领域的应用尤为突出。该软件起源于Mac操作系统,并且兼容iOS平台,作为专业人士及业余爱好者进行图形设计时的首选工具之一。在OmniGraffle的功能模块中,“泳道图流程图”占据着核心地位,它主要用于勾勒业务流程图或系统流程图,其中各个分隔的泳道象征着不同的职能角色、部门划分或工作流程的各个阶段。泳道图(Lanes Diagram)作为流程图的一种特殊形式,通过将流程中的各个操作步骤分配到垂直或水平的“泳道”之中,能够明确地揭示出每个参与方或部门所承担的责任以及整个流程的走向。此类图形通常应用于业务流程管理(BPM)和系统分析领域,旨在帮助用户深入理解并优化复杂的业务流程。 在OmniGraffle中构建泳道图时,由于软件本身并未提供现成的泳道图模板,用户需要自行设计图形和布局以模拟出泳道的效果。然而,您提供的"06stencil泳道图流程图.graffle"文件很可能是一个预先构建好的模板,能够显著简化这一过程。该模板可能包含了预先设计好的泳道形态、箭头以及其他流程图组件,使用户能够直接在此基础上进行修改和增添个人的步骤,从而节省了大量的设计时间。 应用OmniGraffle的泳道图模板,你可以: 1. **导入模板**:首先需要启动OmniGraffle并将"06stencil泳道图流程图.graffle"文件添加到你的项目工作中。 2. **定制泳道**:依据实际需求调整泳道的数量和尺寸,使之契合你的业务流程。每个泳道对应一个角色或部门,确保它们的排列顺序和宽度能够精确地体现实际的工...

81,110

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧