Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一些(JavaScript)事件重新排序有序的html选择选项_Javascript_Html - Fatal编程技术网

一些(JavaScript)事件重新排序有序的html选择选项

一些(JavaScript)事件重新排序有序的html选择选项,javascript,html,Javascript,Html,我在-tag中有一个无序(通过jsp-tags动态生成)的选项列表。 在标记呈现之后,我使用一个简单的JavaScript函数对其重新排序 如果我使用-元素的onClick-事件处理程序,我将获得/查看网页上的有序列表。如果我将该函数附加到我的onload-事件处理程序中,将调用该函数,调试器将向我显示正确的值,但我的选项-元素的结果顺序未排序 如果我在dom元素后面添加带有普通-标记的方法调用,同样的行为也会发生 限制 没有jQuery 数据源不可排序 onClick-处理程序不是probe

我在
-tag中有一个无序(通过jsp
-tags动态生成)的选项列表。 在标记呈现之后,我使用一个简单的JavaScript函数对其重新排序

如果我使用
-元素的
onClick
-事件处理程序,我将获得/查看网页上的有序列表。如果我将该函数附加到我的
onload
-事件处理程序中,将调用该函数,调试器将向我显示正确的值,但我的
选项
-元素的结果顺序未排序

如果我在dom元素后面添加带有普通
-标记的方法调用,同样的行为也会发生

限制

  • 没有jQuery
  • 数据源不可排序
  • onClick
    -处理程序不是prober解决方案
  • 必须在旧浏览器中工作
JavaScript源代码

  function sortSelectById(elementId) {
    var list = document.getElementById(elementId);
    var options = []

    for(var i = 0; i < list.length; i++) {
      options[i] = [];
      options[i][0] = list.options[i].text;
      options[i][1] = list.options[i].value;
      options[i][2] = list.options[i].selected;
    }

    options.sort();

    for (var i = 0; i < options.length; i++) {
      list.options[i].text = options[i][0];
      list.options[i].value = options[i][1];
      list.options[i].selected = options[i][2];
    }

    return;
  }
函数sortSelectById(elementId){
var list=document.getElementById(elementId);
变量选项=[]
对于(变量i=0;i
您遇到的问题是由于二维数组造成的。JavaScript需要被准确地告知排序依据

我们通过将
比较函数
传递给

下面是一个例子:

函数比较函数(a,b){
如果(a[0]==b[0]){
返回0;
}
否则{
返回值(a[0]

香蕉
苹果
橙色
葡萄
谢谢您的帮助。 “问题”相当简单,但却是各种错误的组合

  • 不要将事件附加到
    正文
    ,将其附加到根
    窗口
    元素
  • IE(>6)需要另一个方法调用来向处理程序追加事件
  • IE(>6)需要一个方法引用,并且没有带参数的直接methodcall
  • 以下代码适用于我的场景

     /* Required by the compatibility requirement for IE8 and older */
     function sortStatus() {
      sortSelectById('elem_id') ;
      // sort other fields...
     }
    
    if (window.addEventListener) {
      window.addEventListener('load', sortStatus, false);
    }
    else if (window.attachEvent) {
      window.attachEvent('onload', sortStatus);
    }
    
    更新

      function sortSelectById(elementId) {
        var list = document.getElementById(elementId);
        var options = []
    
        for(var i = 0; i < list.length; i++) {
          options[i] = [];
          options[i][0] = list.options[i].text;
          options[i][1] = list.options[i].value;
          options[i][2] = list.options[i].selected;
        }
    
        options.sort();
    
        for (var i = 0; i < options.length; i++) {
          list.options[i].text = options[i][0];
          list.options[i].value = options[i][1];
          list.options[i].selected = options[i][2];
        }
    
        return;
      }
    

    感谢@Howard Renollet!额外的comperator提示非常整洁,效果非常好

    什么JavaScript首先填充选择列表?对不起,我不太熟悉Stackoverflow。祝你今天愉快。:)