在首次执行代码JavaScript时将永久值存储在变量中

时间:2018-03-05 06:34:21

标签: javascript c# arrays

function filterListBox() {
  debugger;
  var txtValue = document.getElementById('<%=txtSearchUser.ClientID %>').value; //to get entered value to search
  var lstbox = document.getElementById('<%=lstMembers.ClientID %>');
  var opt;
  var array = new Array();
  var array1 = new Array();
  array = lstbox.options; //array value is 8

  if (txtValue != '') {
    for (var i = 0; i < array.length; i++) {
      if (array[i].innerText.toLowerCase().indexOf(txtValue) > -1) {
        opt = document.createElement("option");
        opt.text = array[i].text;
        opt.value = array[i].value;
        array1.push(opt); // only pushes names that match the search filter

      }

    }
    lstbox.options.length = 0;
    for (var i = 0; i < array1.length; i++) {
      opt = document.createElement("option");
      opt.text = array1[i].text;
      opt.value = array1[i].value;
      lstbox.add(opt); // displays the pushed names that matched the search filter
    }

  }
  else {
    lstbox.options.length = 0;
    for (var i = 0; i < array.length; i++) {
      opt = document.createElement("option");
      opt.text = array[i].text;
      opt.value = array[i].value;
      lstbox.add(opt);
    }
  }

}

在上面的代码中,当我第一次运行代码时,变量array的值为8.但是当它进入if(txtValue != '')时,它开始通过名称进行过滤并仅按下那些名称与输入的值(array1)匹配的txtValue。然后它只显示那些名称。

这里的问题是,当我为txtValue输入另一个值时,它正在更新的数组选项中搜索该值,而不是原始数组。所以返回的结果不正确。我谦虚地要求一个解决方案将数组重置为其原始选项并搜索整个数组而不是更新的数组。

谢谢。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:1)

首先将选项复制到永久阵列,然后使用它。

var lstbox, allOptions;
document.addEventListener("DOMContentLoaded", function(event) {
    lstbox = document.getElementById('<%=lstMembers.ClientID %>');
    allOptions = Array.from(lstbox.options);
});

更改

array = lstbox.options;

到这个

array = allOptions;