本帖最后由 Ree12121212 于 2010-04-28 12:52:46 编辑

解决方案 »

  1.   


    <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>
      

  2.   


    $a.$b.click((function(obj){
            return function(){alert(obj.i)};
        })($b));这样就可以了,首先obj要传入,其次要有($b)才可以运行
      

  3.   


    那和$a.$b.click(function() {
      alert($b.i);
    });有什么区别呢。呵呵,这是偷换概念
      

  4.   

    先谢谢楼上各位,特别是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));
    会不会有区别呀?
      

  5.   

    都可以的,因为传入时$a[i].$b和$b是指向一个对象,
    只要定义事件处理函数的时候对象是存在的,那么调用时即便传入的对象不存在也没有关系的。
      

  6.   


    $a.$b.click(function() {
        alert($b.i);
    });和$a[i].$b.click((function(obj){
        return function(){alert(obj.i)};
    })($b));是不是一回事呀?
      

  7.   


    明显这个obj就是$b啊
    他利用了闭包把一个函数包在了一个自执行函数中
    而这个自执行函数的参数正是$b
      

  8.   


    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了。
      

  9.   

    alert($b.i); 这样做是利用全局变量,而用闭包方式是取决于定义处理函数当时传入的值,还是有scope上的区别的.