【问题标题】:Change a HREF with jQuery with a left mouse button click only for that single click使用 jQuery 更改 HREF,只需单击鼠标左键即可
【发布时间】:2011-10-20 20:35:15
【问题描述】:

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

普通链接会打开整个页面,但如果我在末尾添加 &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");
        } 
    });

这很好用,但它会为每次点击附加部件。因此,如果我左键单击一次,然后关闭花式框并右键单击(在新选项卡中打开),那么我仍然会得到带有附加部分的新 URL。它还为每次点击附加该部分。

我尝试将 window.location 用于更改的 url 而不是更改 url - 部分工作,它带来了正确的 url,但它破坏了幻想框。 fancybox 开始加载,但随后被重定向到新页面。

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

【问题讨论】:

    标签: jquery fancybox href


    【解决方案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);
                }
            });
    

    【讨论】:

    • 与 Psytronics 答案相同的问题。这只解决了问题,“&type=77”不再被添加多次。
    • 能否发个链接。我很难想象问题是什么
    • 恐怕我无法提供链接。简而言之,问题是:我有一个以“index.php?id=59”结尾的地址的链接,仅在这种情况下,当有人正常左键单击它时,该链接应该被更改并指向“index .php?id=59&type=77" - 但是它应该保持它在源代码中的样子。
    • 我非常感谢您的努力,但我认为这不是一个可用的解决方案。我对它进行了测试,它在某种程度上有问题,我不太明白为什么,但它不能可靠地工作。 - 我不确定 Psytronics 的新解决方案是否写得很好,只是因为我对 JS 不是很精通,但它似乎可以完成这项工作。无论如何,谢谢!
    • 我认为 Psytronic 的建议最好是从这里用一个函数设置 href,一旦打开了 fancybox,然后从那里删除参数
    【解决方案2】:

    使用.one方法:

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

    更新 当您将插件分配给对象时,花式框可以接受要打开的 href,因此请执行以下操作:

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

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

    【讨论】:

    • 我不知道一种方法,但在这种情况下,它似乎没有多大帮助。 - 它添加了该部分,但添加的部分仍然存在,因此对于下一个“在新选项卡中打开”,该部分仍然存在并且不应该存在。
    • 啊,好吧,我得到了你现在需要的东西,对不起,我有点略过这个问题(坏习惯!),我认为你最好在fancybox激活码中添加类型在那里,而不是改变物理href,你挂钩到fancybox的代码是什么?
    • 我需要更改 href 以让我的 CMS 知道它应该为该页面提供另一种布局。我只是像这样激活fancybox $("#mylink").fancybox();
    • 谢谢你 Psy,它工作得很好。我认为这是解决这个问题的方法。
    【解决方案3】:

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

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

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

    W3C Mouse Events

    Which vs Button

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多