2013-08-22 54 views
-2

我想在ASP.NET主頁上創建一個可以從內容頁面調用的JavaScript函數。我基本上將函數傳遞給一個GridView客戶端ID和一些列,我將使用此函數在gridview上調用jQuery tablesorter,循環訪問函數調用中指定的列數。For循環內部的jQuery調用?

我會打電話的功能,像這樣:

sortTable(<%=gridView1.ClientID%>, 8)

我寫的功能,像這樣:

<script type="text/javascript"> 
     function sortTable(gridView, numberOfColumns) { 
      $("#" + gridView).tablesorter({ 
       headers: { 
        for(var i = 0; i<numberOfColumns; i++){ 
         i: { sorter: 'fancyNumber' } 
       } 

       }, 
       /*Use jQuery to assign zebra stripe CSS, works in IE6+ 
       rather than using pure CSS which doesn't work in IE8 and below.*/ 

       widgets: ['zebra'], 
       widgetZebra: { css: ['normal-row', 'alt-row'] } 
      }); 
     } 
    </script> 

但是,Visual Studio的不喜歡for loop。我允許在headers屬性內創建一個循環嗎?有沒有更好的選擇這個所需的功能?

編輯:我明白了。你不能在對象聲明中循環。我認爲這樣做是創建通過numberOfColumns一個字符串,循環的最佳方式,每次追加到字符串:

var headerString = "headers: " 

for(var i = 0; i < numberOfColumns; i++){ 
    headerString = headerString & i & " { sorter: 'fancyNumber' } ," 
} 

然後使用分別代替對象聲明中的headerString變種?

這可能嗎?

+1

這與jQuery庫沒有任何關係。這是一個基本的JavaScript語法問題,正如您已經看到的那樣,它是無效的。 –

+2

你不能在對象字面聲明中做for循環。 –

+0

不要使用服務器端語言構建JavaScript。將元素添加到元素並從單獨的JS文件中選擇它會更好。 – zzzzBov

回答

4

您需要首先建立自己的對象:

var headers = {}; 
for(var i = 0; i<numberOfColumns; i++) { 
    headers[i] = { sorter: 'fancyNumber' }; 
} 

$("#" + gridView).tablesorter({ 
    headers: headers, 
    //... 
}); 

我猜你根據你的(不正確)的語法需要的輸出,所以你可能需要調整了一點,但這個想法是正確。

1

由於for循環不計算爲某個值,因此無法在對象定義內循環。 if陳述也沒有。相反,您需要提前構建對象:

var headers = {} 

    for(var i = 0; i<numberOfColumns; i++) 
    headers[i] = { sorter: 'fancyNumber' } 

    $("#" + gridView).tablesorter({ 
    headers: headers 

    }, 
    /*Use jQuery to assign zebra stripe CSS, works in IE6+ 
    rather than using pure CSS which doesn't work in IE8 and below.*/ 

    widgets: ['zebra'], 
    widgetZebra: { css: ['normal-row', 'alt-row'] } 
    });