JS函数未运行整个脚本

时间:2018-10-10 22:33:40

标签: javascript

我的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>

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

3 个答案:

答案 0 :(得分:1)

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

我认为这里有两个错误:

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']

答案 1 :(得分:0)

如以上答案所述,循环中存在一个错误。对于i,从0开始,但是这个答案主要集中在其余部分。

对同一问题的看法略有不同。而不是使用正则表达式或其他分隔符进行拆分,我将其制作为适当的HTML,然后将其作为HTMLCollection获得。

JSFiddle-https://jsfiddle.net/hari7190/mbugyz24/

var response = "<option value='Bobs Dock'>Bobs Dock</option><option value='Johns Dock'>Johns Dock</option><option value='Mikes Dock'>Mikes Dock</option><option value='Mayur Dock'>Mayur Dock</option><option value='Foo Dock'>Foo Dock</option>"

parser = new DOMParser();
doc = parser.parseFromString("<select>" + response + "</select>", "text/html");
var options = doc.getElementsByTagName("option");

for(i=0; i<options.length; i++){
    var x=document.createElement('option');
    x.text = options[i].text;
    x.value= options[i].value
    document.getElementById("list").append(x);
}

答案 2 :(得分:0)

您的代码似乎是为完全不同的响应格式设计的,例如

Bobs Doc*1|Johns Dock*2|Mikes Dock*3

但是您的实际响应只是这些选项的HTML,因此您不需要在自己的循环中构造HTML。您可以简单地将其添加到<select>的HTML中:

list.innerHTML += response;