-2

我想在可以从内容页面调用的 ASP.NET 母版页上创建一个 JavaScript 函数。我基本上会向函数传递一个 gridview 客户端 ID 和一些列,然后我会使用这个函数tablesorter在 gridview 上调用一个 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 var 的替代?

那可能吗?

4

2 回答 2

4

您需要先构建您的对象:

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

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

我根据你的(不正确的)语法猜测你想要的输出,所以你可能需要稍微调整一下,但这个想法是正确的。

于 2013-08-22T19:16:15.440 回答
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'] }
  });
于 2013-08-22T19:16:32.093 回答