作者PTTLSboy (阿铯)
看板Ajax
标题[问题] 如何呼叫N次的function只执行一个
时间Tue Oct 30 21:26:42 2012
我页面上有一个<img class='abc' src='略'/>
click事件并传入class名称如:change_bg('abc')
页面下面放了一个jquery的blockUI,里面有一个<img>
当我点击页面上的<img class='abc'/>,会打开block
而且会指定BLOCK里的<img>的class也等於'abc'
并且指定一样的事件,如:change_bg('abc')
让他们两个class一样的目的是要这两个<img>同步动作,
但block里面的<img>,不是固定的,指到哪一张图,他的class就是谁
问题在於block里面的图片事件change_bg('abc')会一直保留
影响到我原本页面上的<img class='abc'>,变成change_bg('abc')执行两次,关闭再打开
N次就会执行N次,因为是有其他用意,没办法改,有没有其他的方法,让我的
change_bg('abc'),只执行一个就好??
原本在页面上的change_bg('abc'),点击block出来里面的<img>即使指定了class='abc'
及事件,但是它就是不理原本页面上的change_bg
所以才再指派了一样的事件给它:change_bg('abc')
但是关闭後会造成我原本页面上的<img class='abc'/>执行两次change_bg('abc')
谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.0.232.61
1F:推 s25g5d4:有看没有懂 有code吗 10/30 22:14
我弄一个范例网页,等一下
※ 编辑: PTTLSboy 来自: 123.0.232.61 (10/30 22:37)
2F:→ SansWord:看不太懂,可是直觉上觉得你要一个清除 listener的方法 10/30 23:53
3F:→ PTTLSboy:对对..可以这麽说..有办法清除後来执行的function吗 10/31 00:20
http://myphpdiary.com/test.php
问题大概如同这个网页描述的
※ 编辑: PTTLSboy 来自: 123.0.232.61 (10/31 00:56)
5F:→ b12031106:我想你可能要先弄清楚你的change_bg到底在做什麽 10/31 01:50
change_bg里面做的事情是传递ID值进去做一些滑鼠事件
※ 编辑: PTTLSboy 来自: 123.0.232.61 (10/31 02:24)
因为BLOCK里的<img class='img1'是後来程式产生的,所以一开始执行的change_bg('img1')
只对原本的有用,BLOCK里的就没反应,所以当图片产生的时候就补change_bg给它
有没有方法可以解决这个问题:block里的img不要重新给它change_bg,用一开始的change_bg
※ 编辑: PTTLSboy 来自: 123.0.232.61 (10/31 02:32)
※ 编辑: PTTLSboy 来自: 123.0.232.61 (10/31 02:33)
7F:→ tyf99:简单一点就设个 global flag,func 执行就 +1 10/31 20:15
8F:→ tyf99:onclick时flag归零。 func先检查flag,大於0就直接return 10/31 20:18
谢谢两个,用了b12031106大的jquery .on解决了..
出乎意料的简单,而且有效!
※ 编辑: PTTLSboy 来自: 123.0.232.61 (10/31 21:11)
9F:推 Darkland:其实 jQuery也可以用 Element 当 selector 11/01 23:42
10F:→ Darkland:所以你的 change_bg 改成也接受传 element 的话也可以解 11/01 23:43
请问是我误会element意思吗? 之後产生的还是不会alert
change_bg($('.img1')); //传入这样吗
function change_bg(id){
id.click(function(){
alert(1);
});
}
※ 编辑: PTTLSboy 来自: 123.0.232.61 (11/02 00:44)
11F:→ b12031106:之後产生的element并没有包在你一开始的$('.img1')里面 11/02 01:10
12F:→ b12031106:去查一下.on跟一般的.click之类的方法有什麽不一样 11/02 01:12
13F:→ b12031106:应该就会懂了 11/02 01:12
14F:→ Darkland:var img=document.createElement('img'); 11/02 13:40
15F:→ Darkland:change_bg(img); 11/02 13:41
16F:→ Darkland:function change_bg(element){$(element).click(...)}; 11/02 13:41