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);
}
});
}
...全文
657 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
  • 打赏
  • 举报
回复
不懂帮顶
兰大计算机安全技术离线作业答案全文共2页,当前为第1页。兰大计算机安全技术离线作业答案全文共2页,当前为第1页。《计算机安全技术》 兰大计算机安全技术离线作业答案全文共2页,当前为第1页。 兰大计算机安全技术离线作业答案全文共2页,当前为第1页。 银行卡信息安全事件频发互联网站成数据泄露"重灾区" "卡在身上,钱却莫名其妙地被转走了",黑客5分钟就可以在网上获取1000个银行卡卡主的姓名、卡号、银行密码、身份证、电话号码等信息,近日曝光的一系列银行卡信息安全事件,给当前脆弱的信息安全防范敲响警钟。 近期,国内银行卡信息安全事件频发,一些消费者遭遇财产损失。专家表示,目前银行卡信息盗取、买卖等已形成黑色产业链,许多互联网企业由于在安全防范上存在漏洞,沦为"黑客"和不法分子盗取用户信息的主要渠道,给金融安全带来重大危害和隐患,对此需采取措施加以完善。 要求:1、请结合操作系统安全技术、计算机网络安全技术与数据库系统安全技术等相关知识来分析该事件。 2、在分析原因的同时,请结合自身的实际情况给出解决方案。 3、没有统一答案,请勿抄袭。 答: 本案例中发生"卡在身上,钱却莫名其妙地被转走了"的主要原因为银行卡信息泄露或被盗取。 一、盗取银行卡信息的方法 (1)伪基站发送钓鱼短信。主要是受害人收到类似10086、95533等所谓的电信运营商或银行发来的短信,登录后被要求输入密码。这些其实都是犯罪分子利用伪基站"包装"后发送给用户的含有钓鱼网站的短信。钓鱼网站的虚假网页上,用户登录后就会被要求输入账号、密码、姓名、身份证号、银行预留手机号等信息,而一旦填写了这些信息,骗子就可以把用户的钱骗走了。 (2)除了使用钓鱼网站获取个人信息,犯罪分子还会利用免费WIFI窃取个人信息。一个WIFI的安全性主要取决于它的架设者是谁,如果是骗子或者是黑客架设了一个免费WIFI,用户一旦接入,所有互联网的数据都可以被黑客监听或窃取。 (3)除了以上两种获取信息的方式,现黑市中的犯罪分子还可能利用改装的POS机提取用户银行卡信息。在黑市中,POS机提取的信息被称为"轨道料",数量上要远远少于钓鱼网站上提取的信息。但是卖价却很高,余额较大的信息甚至可以卖到几千块钱一条。而对于这些信息,犯罪分子通常会等半年以上才把信息出售,目的是让消费者积累大量POS机消费记录,这样警方就无法追查是哪台POS机提取了银行卡信息。 二、银行卡信息安全事件解决方案 (1)加强加密 联网泄密是目前银行卡信息泄露的主要方式,因为计算机网络具有开放性的特点,所以对于防范联网泄密的方式可以通过加密设置。 第一,为计算机设置识别口令,用户只有输入正确的用户名和密码,才能够进入计算机查看相关信息。用户名和密码属于身份认证的一种方式,还可以利用磁性卡片、指纹、声音以及视网膜等先进的身份验证方式,对用户的身份信息进行核查。第二,对计算机网络进行监视报警。对于使用计算机网络的合法用户进行信息的记录,而对于非法使用的用户,要将其尝试入网的时间、数等相关信息记录下来,通过分析追查非法用户的身份。第三,对信息进行加密处理,并且设置特殊的调用口令,此为双重防护,非法用户即使突破口令进入计算机也无法兰大计算机安全技术离线作业答案全文共2页,当前为第2页。兰大计算机安全技术离线作业答案全文共2页,当前为第2页。调出信息。 兰大计算机安全技术离线作业答案全文共2页,当前为第2页。 兰大计算机安全技术离线作业答案全文共2页,当前为第2页。 (2)防范钓鱼网站 第一,目前主流的PC安全软件都含有防钓鱼网站的功能。从前述的技术细节可以看出,钓鱼网站都有其特定的URL地址,因此最常见的防护技术是建立钓鱼网站URL数据库,将用户访问的网站地址在数据库中进行查找比对并判断是否可以继续访问。这实际上是一种穷举的办法,需要采集足够多的样本并不断更新数据库。数据库的建立和更新方式有很多。安全软件一般都含有钓鱼网站举报功能。如果用户认为自己访问了此类网站,便可使用举报方式告知安全厂商,经过分析并确认后的钓鱼网站地址便会进入数据库。还有的安全厂商建立有自己的搜索引擎,通过搜索引擎不间断地抓取网页内容,智能化的分析判断是否为钓鱼网站,并据此建立扩充自己的钓鱼网址库。这种数据库查找的方式识别较为准确,但钓鱼网站的生存周期很短,每天都会出现很多新的网站,因此这种方式无法防护最新的钓鱼网站。 第二,目前出现的新的Web实时防护技术,可以动态智能地分析用户所访问的网页内容。无论呈现给用户的网页有多么复杂,对于浏览器而言都只是可识别的网页代码(HTML、JavaScript、CSS等)。有的安全软件通过专业安全人员的分析可以获得钓鱼网站在网页代码层面的一些特征,通过特征的分析比对可以给访问的网页一个评价值,或对其进行分类,根据分析结果来判断该网
网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这辛苦老范给我们整理了这份实用的秘笈。   Bootcfg   bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。   含有下列参数的 bootcfg 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 bootcfg 命令。   用法:   bootcfg /default  设置默认引导项。   bootcfg /add    向引导列表中添加 Windows 安装。   bootcfg /rebuild  重复全部 Windows 安装过程并允许用户选择要添加的内容。   注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。   bootcfg /scan    扫描用于 Windows 安装的所有磁盘并显示结果。   注意:这些结果被静态存储,并用于本会话。如果在本会话期间磁盘配置发生变化,为获得更新的扫描,必须先重新启动计算机,然后再扫描磁盘。   bootcfg /list   列出引导列表中已有的条目。   bootcfg /disableredirect 在启动引导程序中禁用重定向。   bootcfg /redirect [ PortBaudRrate] |[ useBiosSettings]   在启动引导程序中通过指定配置启用重定向。   范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings   hkdsk   创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。   含有下列参数的 chkdsk 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 chkdsk 命令。   vol [drive:] [ chkdsk [drive:] [/p] [/r]   参数  无   如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 drive: 指定要 chkdsk 检查的驱动器。 /p   即使驱动器不在 chkdsk 的检查范围内,也执行彻底检查。该参数不对驱动器做任何更改。 /r   找到坏扇区并恢复可读取的信息。隐含着 /p 参数。   注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart   创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。   diskpart [ /add |/delete] [device_name |drive_name |partition_name] [size]   参数 无   如果不带任何参数,diskpart 命令将启动 diskpart 的 Windows 字符模式版本。   /add   创建新的分区。   /delete   删除现有分区。   device_name   要创建或删除分区的设备。设备名称可从 map 命令的输出获得。例如,设备名称:   DeviceHardDisk0   drive_name   以驱动器号表示的待删除分区。仅与 /delete 同时使用。以下是驱动器名称的范例:   D:   partition_name   以分区名称表示的待删除分区。可代替 drive_name 使用。仅与 /delete 同时使用。以下是分区名称的范例:   DeviceHardDisk0Partition1    大小   要创建的分区大小,以兆字节 (MB)表示。仅与 /add 同时使用。   范例   下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:   下例将在硬盘上添加一个 20 MB 的分区:   diskpart /add Device HardDisk0 20   Fixboot

81,092

社区成员

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

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