2013-08-22 56 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'] } 
    });