Можно ли сделать так, чтобы функция onclick не выполнялась, если щелчок открывает ссылку на новой вкладке? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть большой, который показывает случайный фрагмент текста из файла .json при каждом нажатии. Теперь иногда текст включает ссылки, которые открываются в новой вкладке. Работает отлично!

Однако я бы хотел, чтобы функция onclick не выполнялась при открытии новой вкладки. Так же, как если бы пользователь открыл ссылку, щелкнув правой кнопкой мыши и открыв новую вкладку.

Это возможно с использованием простого JavaScript? Я включаю функцию selectPodcast - чтобы показать, как генерируется ссылка.

Как я понимаю: я давно не программирую, и мне бы хотелось узнать, как мой код выглядит для опытного программиста. Я думаю, это довольно мило, например, когда ребенок начинает формировать предложения: -)

Я пытался добавить a.onclick = "return false;"; в функцию selectPodcast, но это не сработало.

function getPodcast() {
    var url = "json/podcasts.json";
    var request = new XMLHttpRequest();
    request.open("GET", url);
    request.onload = function() {
        if (request.status == 200) {
            selectPodcast(request.responseText);
        }
    };
    request.send(null);
};

function selectPodcast(responseText) {
    var items = JSON.parse(responseText);
    var choice = [Math.floor(Math.random() * items.length)];
    var title = items[choice].title;
    var link = items[choice].link;
    var description = items[choice].description;
    var a = document.createElement("a");
    var br = document.createElement("br");
    var p = document.createElement("p");
    a.href = link;
    a.target = "_blank";
    a.innerHTML = title;
    p.innerHTML = description;
    var div = document.getElementById("podcast");
    div.innerHTML = "";
    div.appendChild(a);
    div.appendChild(br);
    div.appendChild(p);
};

1 Ответ

0 голосов
/ 27 мая 2019

Если это то, что вам нужно, вы можете проверить, является ли цель тегом <a></a> (ссылка), передав e в качестве параметра функции обратного вызова, который содержит информацию о событии щелчка, такую ​​как позиция, цель, позиция смещения и т. Д.

instanceof ключевое слово проверяет, является ли объект экземпляром HTMLAnchorElement.

function onclick(e){
  if(e.target instanceof HTMLAnchorElement) return console.log('Link');
  
  //body
  console.log('Not a link');
}

test.onclick = onclick;
<div id='test'>Some text <a href='#some_link'>Some link</a></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...