Javascript JS函数未运行整个脚本

Javascript JS函数未运行整个脚本,javascript,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.opt

这部分是我的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使其运行时,它现在将使drop box选项显示

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

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

分割函数返回的数组大小为1,因为它没有在字符串中找到管道“|”。同时,Javascript数组索引是基于零的,因此第一个也是唯一一个项目是记录[0]。由于i=1,循环仅在第二条或更高记录上开始循环;初始化器,它从不运行,因为正如上面的答案所解释的,循环中有一个bug。对于i,从0开始,但这个答案主要集中在剩下的部分

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

JSFiddle-


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

Bobs Doc*1|Johns Dock*2|Mikes Dock*3
但是您的实际响应只是选项的HTML,因此您不需要在自己的循环中构造HTML。您只需将其添加到的HTML中:


否记录的值。长度为1这是问题所在;1等于1,不小于1。你的循环永远不会执行。您可能希望将i设置为0,否则循环将不会运行,因为i=1永远不小于1。。。。你应该从i=0开始尝试改变它,但我的投递箱现在只显示[代码]Bobs Dock约翰Dock mikes Dock[/code]你所说的让我重新思考。为什么不提供我需要的值,用|分开,所以虽然我没有走这条路线,因为我能够改变我需要的响应,但这种方式确实有效。
var regex = /(?<=value=['"])[^'"]*/g;

var arrayOfValues = response.match(regex);
// arrayOfValues = ['Bobs Dock', 'Johns Dock', 'Mikes Dock']
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);
}
Bobs Doc*1|Johns Dock*2|Mikes Dock*3
list.innerHTML += response;