Получить активный элемент DOM, когда event.target имеет значение XMLHttpRequest - PullRequest
1 голос
/ 21 июля 2011

Мне нужно получить значение атрибута для выбранного элемента, но у меня есть ajax-запрос по щелчку, и в этом случае event.target вместо XML-элемента DOM представляет собой XMLHttpRequest.Как я могу получить нажатие элемента DOM в этой ситуации?

// Parsing and makeup.
function showDescription(XMLObj){
    var parser = new DOMParser(),
    XMLDoc = XMLObj.responseText,
    parsedXMLDoc = parser.parseFromString(XMLDoc, 'text/xml'),

    eventTarget = event.target,
    descContent = document.getElementById('description') ;

    // Conditional actions.
    };
};

// Create request.
function loadAsync(url, callback) {
    var request;
    if(window.XMLHttpRequest) {
        request = new XMLHttpRequest();
        request.open("GET", url, true);
        request.send(null);
        request.onreadystatechange = requestProcess;
    } else if(window.ActiveXObject){
        request = new ActiveXObject('Microsoft.XMLHTTP');
        if (request) {
            request.open("GET", url, true);
            request.send(null);
            request.onreadystatechange = requestProcess;
        }
    }

    function requestProcess() {
        if (request.readyState == 4) {
            if (request.status == 200) {
                if (typeof callback == 'function') {
                    callback(request)
                }
            }
        }
    };
};

// Define event listener for each menu element.
function showDescListener(){
    var descPars = document.getElementById('description-paragraphs'),
    descParLi = descPars.getElementsByTagName('li');

    for (var i = 0; i < descParLi.length; i++){
        descParLi[i].addEventListener('click', function(event) {loadAsync('/description/', showDescription)}, false);
    }
};

1 Ответ

1 голос
/ 21 июля 2011

Изменение

function showDescription(XMLObj){

до

function showDescription(XMLObj, target){

Затем измените

descParLi[i].addEventListener('click', function(event) {loadAsync('/description/', showDescription)}, false);

до

descParLi[i].addEventListener('click', function(ev) {loadAsync('/description/', function(request) { showDescription(request, ev.target); })}, false);

А затем используйте target внутри showDescription.


Это изменение фиксирует событие в момент нажатия кнопки в замыкании, которое затем используется в обратном вызове. Другими словами, обратите внимание, как параметр ev используется функцией обратного вызова - значение ev сохраняется при вызове обратного вызова, и его свойство target (нужный вам элемент DOM) затем передается в showDescription.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...