我正在尝试使用javascript删除单个链接,但它无法正常工作。
<a id="yes" target="_blank" href="http://google.com" onclick="this.setAttribute('href', '')">
但由于链接被删除,因此无法打开Google。 我可以删除其他链接,使用不同的id-s,但我希望在新标签页中打开链接后禁用相同的链接ID
答案 0 :(得分:0)
您无法为元素设置相同的ID - ID在单页上必须是唯一的。如果要删除某些特定链接,可以将它们设置为CLASS,并按类删除
除了其他答案之外 - 你可以删除所有访问过的链接的href属性而不是加载页面
$(document).ready(function(){
$("a:visited").attr("href", "#")
});
或者您可以删除现在点击的链接
的href attr$(document).ready(function(){
$("a").click(function(){
setTimeout(function() {
$(this).attr("href", "#")
}, 300);
});
});
答案 1 :(得分:0)
所以你基本上只希望它只能工作一次?有点像...
onclick="if (!this.wasClicked) { this.wasClicked = true; } else { this.removeAttribute('href'); }"
但请注意,使用内联HTML事件(<a onclick="...">...</a>
)是一种非常糟糕的做法。将事件处理程序放在外部文件中。
答案 2 :(得分:0)
任何onclick处理程序都将在默认操作之前执行,这就是为什么你可以阻止事件处理程序的默认操作。
要完成默认操作,然后在下次点击时阻止它,只需使用属性并存储下次点击时检查的布尔值:
document.getElementById('yes').addEventListener('click', function(e) {
if (this.prevented) e.preventDefault();
this.prevented = true;
}, false);
要将其应用于所有链接,您需要
var anchors = document.getElementsByTagName('a');
for (var i=anchors.length; i--;) {
anchors[i].addEventListener('click', function(e) {
if (this.prevented) e.preventDefault();
this.prevented = true;
}, false);
}
答案 3 :(得分:0)
这是一种在没有jQuery的情况下将此逻辑应用于所有“a”标记的方法。只需运行onload
var atags = document.getElementsByTagName('a');
for (var a = 0; a < atags.length; a++) {
atags[a].onclick = function() {window.open(this.getAttribute('href'));
this.removeAttribute('href');
this.onclick = null;};
}
这是一个jsfiddle - http://jsfiddle.net/Awvj4/
要将此逻辑应用于单个标记,请执行以下操作(假设“a”标记的ID为“myatag”)
document.getElementById('myatag').onclick = function() {
window.open(this.getAttribute('href'));
this.removeAttribute('href');
this.onclick = null;};
答案 4 :(得分:0)
我将其视为
因此
function one_time_link(a) {
var clicked = false; // flag; has the link been clicked?
a.addEventListener('click', function (e) {
if (clicked) // yes
e.preventDefault(); // cancel the click
clicked = true; // mark flag as yes
}
}
// apply to your link (afer it exists)
one_time_link(document.getElementById('yes'));
现在,点击取消后,第一个链接点击表现正常。
带有一个标志的多个链接?
function one_time_list(list) {
var clicked = false, i;
function click(e) {
if (clicked) // yes
e.preventDefault(); // cancel the click
clicked = true; // mark flag as yes
}
for (i = 0; i < list.length; ++i) {
list[i].addEventListener('click', click);
}
}
// and usage
one_time_list([node1, node2, node3]);
真的需要删除 href 属性吗?
node.addEventListener('click', function () {
var target = this;
setTimeout(function () { // delay removal until after click complete
target.removeAttribute('href');
}, 50);
});