是否可以在onclick处理程序中修改目标URL?怎么样?
我不想使用window.location = ...
这样的内容,因为它会改变浏览器的行为(点击vs ctrl-click,在新标签页中打开,在特定窗口/框架中打开等等)。 我想要一个干净的解决方案 - 只需更改网址,其余部分应该像往常一样自行完成。
$(...).click(function () {
if (check_some_condition)
// modify target url here...
// do not want to do window.location= - this is not clean
// as it changes the browsers' behaviour (ctrl-click, opening in particular window/frame etc.)
return true;
});
答案 0 :(得分:21)
尝试
$(function(){
$("#theLink").click(function(){
$(this).attr("href","http://tnbelt.com");
});
});
答案 1 :(得分:10)
修改:更新了代码,因为the event handler script is executed first and then the default action takes place。
添加以下版本,向您显示您可以使用.click
,因为您没有注意到我与您分享的怪癖模式链接。 DEMO
$(document).ready (function () {
$('#changeMe'). click (function (e) {
var goLucky = Math.floor(Math.random()*12);
if (goLucky % 2 == 0) {
this.href = "http://www.google.com";
} else {
this.href = "http://www.hotmail.com";
}
});
});
评论e.preventDefault();
& $(this).click()
,因为它不是必需的..
$(document).ready (function () {
$('#changeMe').one ('click', function (e) {
//e.preventDefault();
this.href = "http://www.google.com";
//$(this).click();
});
});
答案 2 :(得分:2)
让我们考虑隐藏的锚标记
<a id="linkId" href="myPageToGo.html" class="thickbox" title="" style="visibility:hidden;">Link</a>
然后您可以在代码中模拟锚点击...
$(...).click(function () {
if (check_some_condition)
$('#linkId').click();
return true;
});
将元素包裹在锚标记内...
$(...).click(function () {
if (check_some_condition)
$(this).wrap('<a id="new1" />');
$('#new1').click();
return true;
});
答案 3 :(得分:1)
烨。
$(this).attr('href', 'http://example.com/');
答案 4 :(得分:0)
包括顶级评论在内的许多答案都忽略了一个重要点。如果用户只是右键单击 URL 可能会在新选项卡/窗口中打开,则此方法将不起作用,因为您直接在 'href' URL 指定的位置进行请求,而不是通过 onclick 事件。>
您可以在 Gourneau 的帖子中提到的这个演示小提琴中尝试相同的方法。
http://jsfiddle.net/skram/PtNfD/7/
$(document).ready (function () {
$('#changeMe').one ('click', function (e) {
this.href = "http://www.google.com";
});
});