получение ссылки на нажатую кнопку внутри события ajax - PullRequest
0 голосов
/ 17 февраля 2019

Я ищу способ получить ссылку на кнопку / ссылку вызывающего абонента внутри события ajax.например:

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "http://www.example.org/example.txt");
oReq.send();

 function reqListener () {
  console.log(this.responseText);
}

В функции reqListener, чтобы получить идентификатор кнопки / класс и т. д. (я говорю о случаях, когда isTrusted = true)

Ниже вы можете найтисобытие загрузки, как оно отображается в консоли.Единственная ссылка на сам объект xhr:

enter image description here

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

Звучит так, будто вы делаете что-то, чего не должны делать.

В таких случаях обычно следует использовать какой-то (плохой) обходной путь, если вы не можете получить доступ к коду, выполняющему запрос XHR.

Некоторые обходные пути, которые вы можете рассмотреть:

  1. Посмотрите на document.activeElement, надеясь, что ссылка / кнопка не потеряли фокус так быстро.
  2. Добавитьглобальный прослушиватель событий для всех событий a, input[type=button], button onclick и регистрация последнего нажатого элемента где-то в корневом элементе (window на веб-странице).Это зависит от того, используете ли вы какую-либо стороннюю библиотеку, и вам следует рассмотреть возможность добавления новых элементов в DOM после завершения регистрации вашего события.
0 голосов
/ 17 февраля 2019

Я бы создал обработчик для вызова xhr со ссылкой на кнопку в его закрытии.что-то вроде этого может помочь: (get не работает во фрагменте из-за cors)

document.getElementById('btn').addEventListener("click", handleClick);

function handleClick(e) {
  console.log('clicked')
  var oReq = new XMLHttpRequest();
  oReq.onload = console.log;//getReqListener(e.target);
  oReq.open("GET", "https://www.example.com/example.txt");
  oReq.send();

}

function getReqListener(target) {
  console.log('getreq')
  return function(data) {
    console.log('fetched');
    console.log(target.text)
    console.log(data)
  }
}
<button id="btn">click me</button>
0 голосов
/ 17 февраля 2019

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

Вы в основном спрашиваете

function foo(cb) {
  const btn = 'You can\'t get me!';
  cb();
}

foo(() => { /* How can I get the value of btn here? */ });

Это не таквозможно.

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