2013-10-11 55 views
0
for (var i = 0; i < 10; i++) { 
    array.push($("<a href=\"#\" data-role=\"button\" data-inline=\"true\">" + i + "</a>")); 
    $("#row").append(array[i]); 
    array[i].click(function() { 
     changeval(i); 
     console.log(i); 
    }); 
} 

我的問題是函數changeval(i)總是變成i的值10。 我嘗試在此for循環中使用onclick函數創建按鈕。我需要一個提示。javascript jquery mobile for循環中創建按鈕

+2

你需要一個閉包爲此,這樣做http://jsfiddle.net/HUahz/'我'是一個共享變量在你的情況下,它將只有最後一個值設置由for循環的時間處理程序被調用。 – PSL

+1

在追加錨後添加'$('[data-role = button]')。button();'。更新@PSL演示:http://jsfiddle.net/Palestinian/HUahz/2/ – Omar

回答

0

使用閉包例如

for (var i = 0; i < 10; i++) { 
    (function(i) { 
     array[i].click(function() { . . . }); 
    )(i); 
} 

如果你正在使用jQuery(好像它,如果你正在使用.click :)你可以使用

http://api.jquery.com/jQuery.each/

遍歷元素和達致這相同的功能。

+0

向下投票關心評論?我在其他人做過這件事之前發佈了這個答案,所以我真的不明白。 –

1

看看JS關閉,i的值被設置爲循環的最後一次迭代。裹在一個自動執行的FUNC與i爲帕拉姆:

for (var i = 0; i < 10; i++) { 
    (function(i) { 
     array 
      .push($("<a href=\"#\" data-role=\"button\" data-inline=\"true\">" 
        + i + "</a>")); 
     $("#row").append(array[i]); 
     array[i].click(function() { 
      changeval(i); 
      console.log(i); 
     }); 
    })(i) 
} 
3

我將會分離初始添加按鈕和「點擊」的行動。

for (var i = 0; i < 10; i++) { 
    array 
      .push($("<a href=\"#\" data-role=\"button\" data-inline=\"true\">" 
        + i + "</a>")); 
    $("#row").append(array[i]); 
    array[i].click(function() { 
     changeval(i); 
     console.log(i); 
    }); 
} 

將分頭:

for (var i = 0; i < 10; i++) { 
    array.push("<a href=\"#\" data-role=\"button\" data-inline=\"true\">" 
        + i + "</a>"); 
    $("#row").append(array[i]); 
}; 

$('#row').on('click', 'a', function() { 
    changeVal($(this).text()); 
    console.log($(this).text()); 
}; 

還要注意,在JavaScript中的變量和函數應在CamelCaseForBetterReadability被寫入。另外請注意,我擺脫了圍繞數組項目的$()。最後,如果您不想在字符串中跳過引號,則可以使用單引號。