如果点击会在新标签页中打开链接,我能否使onclick函数无法执行?

时间:2019-05-26 21:55:24

标签: javascript onclick

我有一个大的,只要单击它,它就会显示.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 :(得分:0)

如果这是您想要的,则可以通过传递<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>