设置列表框的滚动位置

时间:2011-01-20 19:28:45

标签: javascript asp.net listbox

我有一个多选列表框。此列表框包含许多实体的名称。大约1000+。因此,您可以看到滚动浏览会非常烦人。我想要做的是在垂直方向显示A-Z。当用户单击一个字母时,将触发javascript以设置所选第一个出现的字符的滚动位置(不选择项目)。这是在c#中创建的控件,使用客户端脚本管理器呈现javascript。基本上我到目前为止所做的是从char数组A-Z添加一个新的htmlanchor。这会垂直列出字母。这与iTouch / iPhone音乐库非常相似,触摸/单击该字母,滚动设置为第一次出现。我知道如何遍历列表。到目前为止,我有一个onclick函数,就像这样:

private HtmlGenericControl alphaSortContainer;
this.alphaSortContainer = new HtmlGenericControl("div");
char[] alphabet = { 'Z'.......'A' };
for (int i = 0; i < 26; i++)
{
    var letter = new HtmlAnchor();
    link.InnerText = alphabet[i].ToString();
    link.Attributes.Add("onclick", "javascript:jumpToIndex('" + link.InnerText + "');");
    alphaSortContainer.Controls.Add(letter);
}

上面的代码添加(或应该)堆叠在彼此之上的字母。他们的onclick会激活javascript函数并发送信件。

到目前为止我的javascript:

function jumpToIndex(var index) {
    var list = document.getElementByID('" + this.list.ClientID + "');
    for(var i=0; i < list.length; i++) {
        if(list.options[i].value.charAt(0) == index) {
          HOW TO SET THE SCROLL POSITION TO MAKE THAT OBJECT THE TOP OF THE LIST BOX
          break; //pretty sure this is how i would break out of both loops.
        }
    }
}

我只需要滚动到与if语句匹配的项目。此外,我很确定这将是我如何摆脱两个循环。请帮忙!

2 个答案:

答案 0 :(得分:1)

执行此操作的唯一方法是选择选择列表中的一个选项,您可以按以下方式执行:

<select id="myselect">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3" selected="selected">3</option>
  <option value="4">4</option>
</select>

当然,如果您不希望在构建列表时在服务器端进行此选择,或者如果您构建列表clientide,则可以使用这样的javascript来执行此操作:

document.getElementById('myselect').options[<insert number>].selected = true;

并记住<insert number>是zerobased

现在,在您说我不想选择它之前,只需滚动到它,请记住,如果您在列表框中看到一个选项,则默认情况下已选中该选项。

除非您正在使用多选选择框,在这种情况下,这是一个完全不同的球赛,并且您的运气不好;)

答案 1 :(得分:0)

您是否考虑过不显示整个列表,但每个字母都有javascript数组。选择一个字母时,列表中只填充了该字母的项目?

var alphalist=new Array();
alphalist['a']=new Array('aardvark','acorns','apples');
alphalist['b']=new Array('baby','barley');
//etc
 function fill_list{selectedLetter){
  listItems=alphalist[selectedLetter];
  mylist=document.getElementById('mylist');
  mylist.length=0;.length=0;
  for(var i=0;i<listItems.length;i++){
    optionName = new Option(listItems[i],listItems[i])
    var length = mylist.length;
    mylist.options[length] = optionName;
  }
}