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);
    }
}

Я хочу передать аргумент динамического идентификатора this.unorderListLi[l].addEventListener('click', function() { ajaxJsonFetchPost(this.persons[person]['id']); }, false); вместо идентификатора вручную (965). но это не в курсе. Может кто-нибудь сказать мне, каков фактический процесс? Благодарю.

1
sumanta.k 12 Янв 2017 в 22:27

3 ответа

Лучший ответ

У вас уже есть идентификатор, сохраненный как часть элемента, с которым связан обработчик кликов.

this.unorderListLi[l].addEventListener('click', function() {
  var idAttr = this.id;
  ajaxJsonFetchPost(idAttr.split('aid')[1]);
}, false);
0
Sushanth -- 12 Янв 2017 в 19:38

Поскольку вы присоединяете eventListener непосредственно к элементу, вы можете получить доступ к атрибуту самого элемента в атрибуте Event.target, который должен содержать ваш идентификатор .

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);
0
DJ. 12 Янв 2017 в 19:37

Если вы хотите, чтобы элементы каждого 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);
}
0
dodov 12 Янв 2017 в 19:46