【发布时间】:2017-06-13 02:58:05
【问题描述】:
基本上,当 chrome.storage.local 发生更改时,下面的函数会清空选择字段并使用更新的选项重新填充它。这也是我想在选项中添加事件侦听器的时候,以便我可以实现自定义操作。
但我对此束手无策,由于某种原因,我无法在选项中添加事件侦听器。我有一个 setTimeout 函数,可以在渲染选项后打印出选项,并且选项在那里,但 onclick 为空。我还尝试使用 setTimeout 添加事件侦听器,以仔细检查它们是否在另一个步骤中被覆盖,但这也不起作用。
编辑以从反馈中澄清:控制台不显示事件侦听器回调 console.log('working'),因此它不起作用。而且我已经在使用 select onchange 监听器。但我需要重新关注“信息”字段,即使他们重新选择了相同的选项。
任何帮助将不胜感激!
function updateSelectOptions(selectID){
var selectList = document.getElementById(selectID);
while (selectList.length > 0) {
selectList.remove(selectList.length -1);
}
var storage = chrome.storage.local;
storage.get(['settingsArray', 'selectedPage'], function(data) {
var settingsArray = data.settingsArray;
var settingsNameArray = settingsArray.map(function(ele) {
return ele.pageName;
});
if (selectID === 'pageSelectDropdown') {
settingsNameArray.push('Add New Page');
}
var selectedPage = data.selectedPage;
//Create and append the options
for (var i = 0; i < settingsNameArray.length; i++) {
var option = document.createElement("option");
option.setAttribute("value", i);
option.setAttribute("class", 'optionClass');
option.text = settingsNameArray[i];
option.addEventListener('click', ()=>{
console.log('working')
document.getElementById('info').focus();
});
selectList.appendChild(option);
}
document.getElementById(selectID).value = selectedPage;
})
}
实际上,即使这个玩具示例也不起作用,这里有什么问题? Mouseup,单击都不会产生 console.log 事件。
<select id='pageSelectDropdown'>
<option value='Add New Page'>Add New Page</option>
<option value='Great Page'>Great Page</option>
<option value='Family Page'>Family Page</option>
</select>
<script type="text/javascript">
opts = document.getElementsByTagName('option');
console.log(opts)
for (i = 0; i < opts.length; i++) {
opts[i].addEventListener('click', ()=>{
console.log('clicked')
})
}
</script>
【问题讨论】:
-
but the onclick is null使用addEventListener添加事件侦听器不会更改使用.onclick =“添加”的事件侦听器 - 所以.onclick为空是非常好的 - 事件侦听器应该无论如何都已正确添加 -
顺便说一句,您只需设置
selectList.options.length = 0即可删除所有选项。 -
这是一个多选列表吗?如果没有,在我看来,将侦听器添加到选择本身并在处理程序中测试当前值会更容易。
-
非常感谢您迄今为止的反馈!所以它实际上并没有在 eventlistener 回调中触发 console.log,所以它仍然以某种方式被破坏。这是一个单一的选择列表,但即使我重新选择了相同的选项,我也需要能够重新关注信息字段,这就是 onChange 侦听器不起作用的原因。真的很感谢这些信息,但对这些细节一无所知:)
标签: javascript html events addeventlistener