javascript - 为什么 HTML 数据列表的选项标签不起作用

标签 javascript html bookmarklet javascript-injection

如标题所述,我在想这部分代码是否有错误:

var td5 = document.createElement("td");
td5.innerHTML = "Locale";
tr3.appendChild(td5);

var td6 = document.createElement("td");
tr3.appendChild(td6);

var tdc3 = document.createElement("input");
tdc3.type = "text";
tdc3.style.width = "100%";
tdc3.setAttribute('list', 'lcl');
tdc3.id = "loc";
var tdc3a = document.createElement("datalist");
tdc3a.id = "lcl";
var lop1 = document.createElement("option");
lop1.value = "MY";
lop1.innerHTML = "MY";
var lop2 = document.createElement("option");
lop2.value = "SG";
lop2.innerHTML = "SG";
var lop3 = document.createElement("option");
lop3.value = "AU";
lop3.innerHTML = "AU";
var lop4 = document.createElement("option");
lop4.value = "NZ";
lop4.innerHTML = "NZ";
var lop5 = document.createElement("option");
lop5.value = "PK";
lop5.innerHTML = "PK";
var lop6 = document.createElement("option");
lop6.value = "PH";
lop6.innerHTML = "PH";
var lop7 = document.createElement("option");
lop7.value = "ID";
lop7.innerHTML = "ID";
var lop8 = document.createElement("option");
lop8.value = "VN";
lop8.innerHTML = "VN";
var lop9 = document.createElement("option");
lop9.value = "TH";
lop9.innerHTML = "TH";
var lop10 = document.createElement("option");
lop10.value = "IN";
lop10.innerHTML = "IN";
var lop11 = document.createElement("option");
lop11.value = "CN";
lop11.innerHTML = "CN";
var lop12 = document.createElement("option");
lop12.value = "JP";
lop12.innerHTML = "JP";
var lop13 = document.createElement("option");
lop13.value = "KR";
lop13.innerHTML = "KR";
var lop14 = document.createElement("option");
lop14.value = "TW";
lop14.innerHTML = "TW";
var lop15 = document.createElement("option");
lop15.value = "HK";
lop15.innerHTML = "HK";
var lop16 = document.createElement("option");
lop16.value = "HK-EN";
lop16.innerHTML = "HK-EN";
tdc3a.appendChild(lop1);
tdc3a.appendChild(lop2);
tdc3a.appendChild(lop3);
tdc3a.appendChild(lop4);
tdc3a.appendChild(lop5);
tdc3a.appendChild(lop6);
tdc3a.appendChild(lop7);
tdc3a.appendChild(lop8);
tdc3a.appendChild(lop9);
tdc3a.appendChild(lop10);
tdc3a.appendChild(lop11);
tdc3a.appendChild(lop12);
tdc3a.appendChild(lop13);
tdc3a.appendChild(lop14);
tdc3a.appendChild(lop15);
tdc3a.appendChild(lop16);
document.body.appendChild(tdc3);
document.body.appendChild(tdc3a);

下图是我将代码注入(inject)aspx页面后的截图: Screenshot

下图是我将代码注入(inject)到自己创建的 HTML 虚拟页面后的截图: Expected result

附加信息: 我用 Javascript 编写代码的原因是我目前正在为我的工作用途开发一个小书签注入(inject)器。
我正在尝试将 Javascript 代码注入(inject) .aspx 页面以弹出一个包含一些文本字段、数据列表和下拉列表的 div block 。我使用的浏览器是 IE 11。
我试图将原始代码文件注入(inject)到我自己创建的虚拟 HTML 页面中,它完全可以正常工作,没有任何错误,但不是在我刚才提到的 .aspx 页面中。
为了创建下拉列表,我们可能需要创建一个选择标签和几个选项标签作为子标签。这在注入(inject)后的 .aspx 页面中工作正常。
但不幸的是,datalist 标签中的 option 标签无法像上面的屏幕截图那样正常工作。

请各位多多指教。 非常感谢。

最佳答案

  1. 有必要将 datalist 元素附加到 body 或文档中存在的任何其他元素,例如

document.body.appendChild(tdc3a);

  1. 目前,浏览器似乎忽略了在 inputlist 属性设置后插入到 DOM 中的 datalists。因此,在设置 inputlist 属性之前,将 datalist 插入 DOM 很重要。示例:http://codepen.io/askl/pen/kXZLbj

  2. Datalist 并不适用于所有浏览器,例如截至 2016 年 7 月,Safari 和 Firefox 不支持它。另请参阅 http://caniuse.com/#search=datalist .

关于javascript - 为什么 HTML 数据列表的选项标签不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38392065/

相关文章:

javascript - 添加默认参数AddEventListener函数调用

javascript - 在 chartJS 和 Angular 上水平滚动时使 y 轴变粘

javascript - 空白页上的书签

javascript - diigolet 书签如何绕过跨脚本?

php - 单击 div A 时异步更新 div B

javascript - 如何使用crossfilter和DC.js处理缺失数据?

html - 始终向右浮动侧边栏

css - 仅当 URL 没有片段标识符时才显示 div

javascript - 使我的书签跨浏览器

javascript - 如何获得对 Promise 的延迟对象的引用?