首页 > 解决方案 > JS函数没有运行整个脚本

问题描述

我的 JS 的这一部分

  var records=response.split('|');
  for (i=1; i<records.length; i++) {
    var record=records[i].split('*');
    var region=record[0];
    var regionid=record[1];
    var x=document.createElement('option');
    x.text=region;
   list.options.add(x);
   }

当它进入 for 循环时,它从不运行 { } 之间的东西

记录是

0: "<option value='Bobs Dock'>Bobs Dock</option><option value='Johns Dock'>Johns Dock</option><option value='Mikes Dock'>Mikes Dock</option>"
length: 1

响应是

"<option value='Bobs Dock'>Bobs Dock</option><option value='Johns Dock'>Johns Dock</option><option value='Mikes Dock'>Mikes Dock</option>"

那么为什么它不运行 {} 之间的项目?

编辑********

当更改为 0 以便它运行时,它现在将使下拉框选项说

<option>
      "<option value='Bobs Dock'>Bobs Dock</option><option value='Johns Dock'>Johns Dock</option><option value='Mikes Dock'>Mikes Dock</option>"
</option>

相反,它应该做的是将每个选项分解为下拉框自己的选项。

标签: javascript

解决方案


您的 split 函数返回一个大小为 1 的数组,因为它没有找到管道 '|' 在你的字符串中。同时,Javascript 数组索引是从零开始的,所以第一个也是唯一的项目是 record[0]。由于“i = 1;”,您的循环仅开始循环第二个或更高的记录 初始化程序,它永远不会运行,因为“i<records.length;” 从一开始就是假的。

我认为这里有两个错误:

1) 将 for 循环初始化为零(即“i=0;”)

2)您可能需要以不同的模式拆分,因为您的字符串中没有管道。也许尝试:

var valueRegEx = /value='([^']+)'/;  // find the contents of the value attribute
var textRegEx = />([^<]*)/;  // find the text of the option

var records=response.split('</option><option ');
for (i=0; i<records.length; i++) {
  var option = record[i];
  var value = valueRegEx.exec(option)[1]
  var text = textRegEx.exec(option)[1]

  // ...
  // Not sure what you're trying to do at this part,
  // but the above hopefully answers your question 
  // ...

  var x=document.createElement('option');
  x.text=region;
  list.options.add(x);
}

从响应字符串中检索所有值的另一种方法是让正则表达式解析出整个内容:

var regex = /(?<=value=['"])[^'"]*/g;

var arrayOfValues = response.match(regex);
// arrayOfValues = ['Bobs Dock', 'Johns Dock', 'Mikes Dock']

推荐阅读