2009-07-26 167 views
2

我在創建列表後創建了一個帶有複選框的列表我正在使用「.each」遍歷它們並嘗試應用點擊過程。jQuery .attr函數沒有正確返回

像這樣我的代碼工作正常:

$.ajax({ 
    url: "./views/todoitems.view.php", 
    data: "cmd=list", 
    success: function(html){ 
     $('#list-container').empty().append(html); 
     $('input:checkbox').each(function(){ 
      $check = $(this); 
      $check.click(function(){ 
       alert($(this).attr('itemid')); 
      }); 
     }); 
    } 
}); 

但是,當我更改警告是

alert($check.attr('itemid')); 

它永遠只能顯示在列表的最後一個項目的編號重要的是點擊哪一個。 我在做什麼錯?

回答

4

$ check被設置在每個處理程序中並且是一個全局變量。這意味着它將保留最後一個值集,即最後一個複選框。如果你想做正確的話,你需要將它設置在點擊處理程序中。它更改爲:

$.ajax({ 
    url: "./views/todoitems.view.php", 
    data: "cmd=list", 
    success: function(html) { 
    $('#list-container').empty().append(html); 
    $('input:checkbox').each(function(){ 
     $check.click(function() { 
     var $check = $(this); 
     alert($check.attr('itemid')); 
     }); 
    }); 
    } 
}); 

注:var上面用來控制範圍。

此外,您不需要使用each()。這相當於:

$.ajax({ 
    url: "./views/todoitems.view.php", 
    data: "cmd=list", 
    success: function(html) { 
    $('#list-container').empty().append(html); 
    $('input:checkbox').click(function() { 
     alert($(this).attr('itemid')); 
    }); 
    } 
}); 
2

爲了增加克萊圖斯的答案(我不能評論還)$支票成爲一個隱含的全局變量,因爲它的聲明中缺少變種。