簡體   English   中英

獲取活動 DOM 元素,當 event.target 為 XMLHttpRequest

[英]Get active DOM element, when event.target is XMLHttpRequest

我需要獲取單擊元素的屬性值,但我有一個 ajax 單擊請求,在這種情況下 event.target 是 XMLHttpRequest 而不是單擊的 DOM 元素。 在這種情況下如何獲取單擊的 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);
    }
};

改變

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

然后在showDescription中使用target


此更改捕獲在閉包中單擊按鈕時的事件,然后在回調中使用該事件。 換句話說,請注意回調 function 是如何使用ev參數的——調用回調時會保留ev的值,然后將其target屬性(您想要的 DOM 元素)傳遞給showDescription

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM