this.jsonFetch = function() {
for (person in this.persons) {
console.log(person, '= ', this.persons[person]['title']);
this.unorderList.innerHTML += "<li><a id='aid" + this.persons[person]['id'] + "'href='#' >" + this.persons[person]['title']['rendered'] + "</a></li>";
}
this.unorderListLi = document.getElementById("ul").getElementsByTagName("a");
for ( l = 0; l <= this.unorderListLi.length; l++ ) {
this.unorderListLi[l].addEventListener('click', function() { ajaxJsonFetchPost(965); }, false);
}
}
我想传递动态id参数this.unorderListLi[l].addEventListener('click', function() { ajaxJsonFetchPost(this.persons[person]['id']); }, false);
而不是手动ID(965)。但它不在循环中。
谁能告诉我实际过程是什么?
感谢。
答案 0 :(得分:0)
由于您将eventListener
直接附加到元素,因此您可以在Event.target
属性下访问元素本身的属性,该属性应包含 id 。< / p>
this.unorderListLi[l].addEventListener('click',
function(e) {
ajaxJsonFetchPost(e.target.getAttribute('id').slice(3)); // slice(3) to pick the number after "aid" string in id
}, false);
答案 1 :(得分:0)
您已将id存储为与点击处理程序关联的元素的一部分。
this.unorderListLi[l].addEventListener('click', function() {
var idAttr = this.id;
ajaxJsonFetchPost(idAttr.split('aid')[1]);
}, false);
答案 2 :(得分:0)
如果您希望每个人的li
元素都有事件侦听器,则需要嵌套循环。也可以在var
和person
前面使用l
,否则您将制作全局变量!请务必在this.persons
内使用persons
代替jsonFetch()
。
this.jsonFetch = function() {
for (var person in this.persons) {
console.log(person, '= ', this.persons[person]['title']);
this.unorderList.innerHTML += "<li><a id='aid" + this.persons[person]['id'] + "'href='#' >" + this.persons[person]['title']['rendered'] + "</a></li>";
this.unorderListLi = document.getElementById("ul").getElementsByTagName("a");
for (var l = 0; l <= this.unorderListLi.length; l++ ) {
addEvt(this.unorderListLi[l], this.persons[person]['id']);
}
}
}
function addEvt(obj, id) {
obj.addEventListener('click', function() {
ajaxJsonFetchPost(id);
}, false);
}