使用jQuery更改HREF,只需单击鼠标左键单击该单击

时间:2011-08-05 12:51:25

标签: jquery fancybox href

我想在iframe中使用fancybox打开一个站点,如果用户选择在新选项卡或窗口中打开指向该站点的链接,则需要提供不同的布局(完整布局)。

普通链接会显示整页,但如果我在最后添加& type = 77,我的CMS就知道它应该提供适合iframe的精简版本。如果使用鼠标左键单击链接,以下代码将附加“& type = 77”。

$('#mylink').mousedown(function(event) {
        if(event.which == 1) {
            var actualHref = $(this).attr("href");
            $(this).attr("href", actualHref + "&type=77");
        } 
    });

这很好用,但它会为每次点击附加部分。所以,如果我左键单击并关闭fancybox并在之后右键单击(在新选项卡中打开),那么我仍然最终得到带有附加部分的新URL。并且它还为每次点击附加该部分。

我尝试将window.location用于更改的网址而不是更改网址 - 部分工作,它提出了正确的网址,但它打破了fancybox。 fancybox开始加载,但后来被重定向到新页面。

也许有更好的方法。提前致谢。

3 个答案:

答案 0 :(得分:3)

使用.one方法:

$('#mylink').one("mousedown", function(event) {
        if(event.which == 1) {
            var actualHref = $(this).attr("href");
            $(this).attr("href", actualHref + "&type=77");
        } 
    });

<强>更新 将插件分配给对象时,Fancy box可以接受打开href,所以执行以下操作:

$("#mylink").each(function(){
     var $this = $(this);
     $this.fancybox({"href": $this.attr("href")+"&type=77"});
});

(对于单个元素,有些人可能比使用each知道更好/不喜欢,但我不认为这对单个调用真的很重要)

答案 1 :(得分:1)

我希望这可以解决这个问题:

var myLink = $('#mylink');
        var actualHref = myLink.attr("href");

        myLink.one("mousedown", function (event) {
            if (event.which == 1) {
                $(this).attr("href", actualHref + "&type=77");
            }
        });
        myLink.one("mouseleave", function (event) {
            if (event.which == 1) {
                $(this).attr("href", actualHref);
            }
        });

答案 2 :(得分:0)

jQuery .one() method只执行一次事件。

jQuery .unbind() method从元素中删除事件处理程序。

您可能还想了解有关鼠标事件的更多信息:

W3C Mouse Events

Which vs Button