发现一个很奇怪的jQuery问题,郁闷了很久了。 本帖最后由 Ree12121212 于 2010-04-28 12:52:46 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script><script>window.onload=function(){ var $a = $("<div>"); var $b = $("<span>").html("bbb"); $b.extend({ i : 123 }); $a.extend({ $b : $b }); $b.appendTo($a); $a.appendTo(document.body); $a.$b.click((function(obj){ return function(){alert(obj.i)}; })($b));}</script> $a.$b.click((function(obj){ return function(){alert(obj.i)}; })($b));这样就可以了,首先obj要传入,其次要有($b)才可以运行 那和$a.$b.click(function() { alert($b.i);});有什么区别呢。呵呵,这是偷换概念 先谢谢楼上各位,特别是hookee,呵呵。如果$a和$b都是随意在更新可变的呢,这样也能保证每个$a都能找到对应的$b吗? var $a = []; var $b; for(var i = 0; i < 10; i++){ $a[i] = $("<div>"); $b = $("<span>").html("bbb"); $b.extend({ i : i }); $a[i].extend({ $b : $b }); $b.appendTo($a[i]); $a[i].appendTo(document.body); $a[i].$b.click((function(obj){ return function(){alert(obj.i)}; })($b)); }另外还想问一下各位$a[i].$b.click((function(obj){ return function(){alert(obj.i)}; })($b));和$a[i].$b.click((function(obj){ return function(){alert(obj.i)}; })($a[i].$b));会不会有区别呀? 都可以的,因为传入时$a[i].$b和$b是指向一个对象,只要定义事件处理函数的时候对象是存在的,那么调用时即便传入的对象不存在也没有关系的。 $a.$b.click(function() { alert($b.i);});和$a[i].$b.click((function(obj){ return function(){alert(obj.i)};})($b));是不是一回事呀? 明显这个obj就是$b啊他利用了闭包把一个函数包在了一个自执行函数中而这个自执行函数的参数正是$b var $a = []; var $b; for(var i = 0; i < 10; i++){ $a[i] = $("<div>"); $b = $("<span>").html("bbb"); $b.extend({ i : i }); $a[i].extend({ $b : $b }); $b.appendTo($a[i]); $a[i].appendTo(document.body); // $a[i].$b.click((function(obj){// return function(){alert(obj.i)};// })($b)); $a[i].$b.click(function(){ alert($b.i); }); }但是这样输出就不对了,点任何一点都是9了。 alert($b.i); 这样做是利用全局变量,而用闭包方式是取决于定义处理函数当时传入的值,还是有scope上的区别的. 用jquery的addclass,当鼠标移到li上给li增加样式,请帮忙 jqurey treeview在asp.net里如何将后台sqlserver的数据在页面加载时就动态绑定并显示 滚动条问题 javascript 里 window.showDialog()的问题 JS如何控制IFRAME里的控件? 为什么htc这么傻笨,还是我不会请高手来指点迷津!谢谢! 我要4999分啊。。谁出个90分的题??? 窗口resize就刷新页面,怎样实现? showModalDialog传很长的参数后台获取的问题 关于jquery的问题 如何按住shift键批量选中多封邮件? extjs 问题。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
window.onload=function(){
var $a = $("<div>");
var $b = $("<span>").html("bbb");
$b.extend({
i : 123
});
$a.extend({
$b : $b
});
$b.appendTo($a);
$a.appendTo(document.body);
$a.$b.click((function(obj){
return function(){alert(obj.i)};
})($b));
}
</script>
$a.$b.click((function(obj){
return function(){alert(obj.i)};
})($b));这样就可以了,首先obj要传入,其次要有($b)才可以运行
那和$a.$b.click(function() {
alert($b.i);
});有什么区别呢。呵呵,这是偷换概念
如果$a和$b都是随意在更新可变的呢,这样也能保证每个$a都能找到对应的$b吗?
var $a = [];
var $b;
for(var i = 0; i < 10; i++){
$a[i] = $("<div>");
$b = $("<span>").html("bbb");
$b.extend({
i : i
});
$a[i].extend({
$b : $b
});
$b.appendTo($a[i]);
$a[i].appendTo(document.body);
$a[i].$b.click((function(obj){
return function(){alert(obj.i)};
})($b));
}另外还想问一下各位
$a[i].$b.click((function(obj){
return function(){alert(obj.i)};
})($b));
和
$a[i].$b.click((function(obj){
return function(){alert(obj.i)};
})($a[i].$b));
会不会有区别呀?
只要定义事件处理函数的时候对象是存在的,那么调用时即便传入的对象不存在也没有关系的。
$a.$b.click(function() {
alert($b.i);
});和$a[i].$b.click((function(obj){
return function(){alert(obj.i)};
})($b));是不是一回事呀?
明显这个obj就是$b啊
他利用了闭包把一个函数包在了一个自执行函数中
而这个自执行函数的参数正是$b
var $a = [];
var $b;
for(var i = 0; i < 10; i++){
$a[i] = $("<div>");
$b = $("<span>").html("bbb");
$b.extend({
i : i
});
$a[i].extend({
$b : $b
});
$b.appendTo($a[i]);
$a[i].appendTo(document.body);
// $a[i].$b.click((function(obj){
// return function(){alert(obj.i)};
// })($b)); $a[i].$b.click(function(){
alert($b.i);
});
}但是这样输出就不对了,点任何一点都是9了。