addEvenListener不'我不研究动态javascript
addEvenListener doesn't work on dynamic javascript
所以我目前正忙于学习JavaScript。我创建了一些动态按钮,并试图添加一个addEvenListener。但它不起作用,我也不明白为什么它不起。我只是在测试一些东西,并尝试使用本地存储中的值创建按钮。它几乎可以工作,只有addEvenListener不工作。我只想要一个简单的警报,其中包含来自本地存储的密钥。
for (var i = 0; i <= localStorage.length-1; i++) {
var categoryButton = document.createElement('input');
categoryButton.setAttribute('class', 'forumMenu');
categoryButton.setAttribute('type', 'button');
categoryButton.setAttribute('name', localStorage.key(i));
categoryButton.setAttribute('value', localStorage.key(i));
categoryButton.setAttribute('id', localStorage.key(i));
categoryButton.addEventListener('click', function(col){
alert(col);
}(localStorage.key(i)),true);
forumMenu.appendChild(categoryButton);
}
有人知道为什么它不起作用吗?
您没有将函数传递给EventTarget.addEventListener()
。您立即执行并传递以下结果:
function (col) {
console.log(col);
}(localStorage.key(i))
即CCD_ 2。您可以使用以下语法对此进行修改:
categoryButton.addEventListener('click', (function(col) {
// return a function to addEventListener
return function(){
console.log(col);
}
})(localStorage.key(i)),true);
这里有一个演示:
var input;
for (var i = 0; i <= 5; i++) {
input = document.createElement('input');
input.type = "button"
input.value = i;
input.addEventListener('click', function(i) {
// return a function to addEventListener
return function() {
console.log(i);
}
}(i), true);
document.body.appendChild(input);
}
您将值存储在id
属性中,所以只需使用它:
for (var i = 0; i <= localStorage.length-1; i++) {
var categoryButton = document.createElement('input');
categoryButton.setAttribute('class', 'forumMenu');
categoryButton.setAttribute('type', 'button');
categoryButton.setAttribute('name', localStorage.key(i));
categoryButton.setAttribute('value', localStorage.key(i));
categoryButton.setAttribute('id', localStorage.key(i));
categoryButton.addEventListener('click', function () {alert(this.getAttribute('id'));});
document.body.appendChild(categoryButton);
}
在事件处理程序中,this
引用<input>
元素本身,因此您只能检索属性值。
这是因为您将事件侦听器分配给一个不在DOM中的对象(这是因为在加载DOM后创建了此元素)
试试这个:
categoryButton.onclick = function(col){
alert(col);
}
您可以向var声明一个函数,然后将该函数重新分配给事件处理程序:
var myFunction = function(){
alert("I'm a function");
}
myElement.onclick = myFunction;
相关文章:
- 动态Javascript表单不起作用
- 从脚本中的动态(javascript)网页获取信息
- 创建动态javascript对象
- HTML 5 帮助.使用websql数据库中的动态javascript渲染选项
- 更改动态 JavaScript 数据
- 将动态javascript变量附加到HTML标记.InnerHTML&insertAdjacentHTML都不正
- addEvenListener不'我不研究动态javascript
- 使用加载时的Codeigner动态javascript->看法
- JSON动态Javascript解析”;未定义”;
- jsf应用程序中的动态javascript
- UpdatePanel中自定义控件内的动态javascript
- 使用wro4j创建动态javascript捆绑包
- 如何在PHP中包含动态Javascript页面的静态HTML结果
- 动态JavaScript与rail一起徘徊
- 在 Symfony 2 中生成动态 JavaScript 的正确方法
- For 循环中的动态 Javascript 条件
- 如何确定调用动态 JavaScript 文件的页面和 ASP.net 中的用户
- 是否可以缓存具有指向动态JavaScript的链接的HTML页面
- 动态 javascript,用于检测复选框是否被选中并禁用相应的输入字段
- 如何制作具有键和值组的动态JavaScript数组