2013-09-23 66 views
0

我正在for循環中創建一個無序列表和一個按鈕。我想在同一個循環中爲按鈕綁定一個點擊函數。在for循環中綁定單擊事件

嘗試與連接選項。它不工作。

function displayFeeds(items){ 
    var ul = $('#listview'); 
    for (var i = 0; i < items.length; i++) { 
     var li = $('<li/>').html(items[i].DeviceNames); 
     li.append($('<li/>').html(items[i].DeviceQuantity)); 
     li .append('<input type="button" value="Add" id="'+i+'">'); 
     // Enhance new button element 
     li.append($('<hr>')); 
     ul.append(li); 


    $('#"+i+"').bind('click', function() {    
     console.log("called"); 
     var clickedID = this.id; 
     console.log(clickedID); 
     UpdateDeviceDetails(clickedID);    
    }); 
    } 
} 

我該在這裏做什麼?

+0

看看這個問題[Javascript閉合內循環 - 簡單實用的例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –

+0

你的意思是$ ('#'+ i +'')。 –

+1

'$('#'+ i)...'??? –

回答

1

嘗試改變

$('#"+i+"').bind('click', function() { 

$('#'+i).bind('click', function() { 
+0

它像一個魅力。非常感謝你!!! – Ash

+0

很高興它幫助灰並將其標記爲答案:) – iJade

1

除了語法錯誤停止從工作當前的代碼,追加x號碼點擊處理程序在一個循環會比較慢。更好的解決方案是將委託事件附加到單個共享父元素。試試這個:

function displayFeeds(items){ 
    var ul = $('#listview'); 
    for (var i = 0; i < items.length; i++) { 
     var li = $('<li/>').html(items[i].DeviceNames); 
     li.append($('<li/>').html(items[i].DeviceQuantity)); 
     li.append('<input type="button" value="Add" class="add-input" />'); 
     li.append($('<hr>')); 
     ul.append(li); 
    } 
} 

// single event handler... 
$('#listview').on('click', '.add-input', function() { 
    UpdateDeviceDetails(this.id);    
}); 

你甚至可以簡化,通過剛纔路過的UpdateDevideDetails的參考click處理器,這樣的事情:

$('#listview').on('click', '.add-input', UpdateDeviceDetails); 

var UpdateDeviceDetails = function(el) { 
    var id = el.id; 
    // rest of your logic... 
} 

另外請注意,您的jQuery生成的HTML將是無效的 - 您不能將li作爲另一個li元素的直接子元素。所有li元素都應具有父項ulol

+0

非常感謝您的回覆。我需要將ID傳遞給UpdateDeviceDetails()的參數。 ID的值應該像0..1 ..(即來自for循環的i的值)。 – Ash

+0

@Ash我答案中的所有方法都會這樣做。 –