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

Posted

技术标签:

【中文标题】在第一次执行代码 JavaScript 时将永久值存储在变量中【英文标题】:Store permanent value in a variable on first time execution of the code, JavaScript 【发布时间】:2018-08-12 18:26:33 【问题描述】:
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】:

先将选项复制到永久数组,然后使用它。

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

改变

array = lstbox.options;

到这里

array = allOptions;

【讨论】:

感谢您的回复。刚试过,但allOptions 的值对我来说是空的。我是这种方法的新手,所以我不明白为什么。您能想到原因或提出其他方法吗?谢谢。 那么你在加载dom之后填充列表框。您可以在填写列表后设置 allOptions。我看不到你的完整代码。

以上是关于在第一次执行代码 JavaScript 时将永久值存储在变量中的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 进阶第一章(分支结构)

滚动时将图像动态更改为 rgb 和灰度

如何仅在创建时将值插入数据库?(SQLite Android Studio)

lldb - 在调试时将十六进制值作为输入传递

松软科技前端课堂:JavaScript 数值方法

javaScript中的setTimeout返回值有啥用?