-1

是否可以捕获用户单击的网页上的哪个链接?不是在谈论他们是否在地址栏中手动输入了一个 url,或者他们是否点击了后退按钮——而是在当前页面上的现有链接或菜单项。

这适用于具有标准页眉和页脚的商业网页,其中包含指向公司网站上其他页面的链接。

他们有一个复杂的订单表格,尝试保存和恢复表格的状态是不切实际的。
如果在填写订单的过程中,客户需要访问网站上的另一个页面 - 以查看产品等。理想情况下,我可以提供在另一个浏览器窗口或选项卡中打开链接的选项,而不是离开页面,以便用户不会丢失他们在订单中投入的工作。

我知道我可以编写一组不同的页眉和页脚,以便在另一个窗口/选项卡中打开它们的链接,但为了简化维护和更新,我试图尽量减少使用的变体数量。用户也有可能想要放弃订单,如果试图这样做而打开另一个窗口,可能会感到困惑。

我正在使用 JQuery 和 Javascript。

4

2 回答 2

0

这就是我想出的处理这个问题的方法,它对我有用。
检测用户何时单击页面链接,然后评估链接以确定如何正确处理。 它不适用于在浏览器地址栏中键入的链接。

我使用 jquery magnific-popup (http://dimsemenov.com/plugins/magnific-popup/)创建一个弹出窗口(我的代码中的 .popupForm-handleExitRequest ),为用户提供在同一窗口中打开链接的选项(和丢失他们的订单数据),在新窗口中或返回订单表格。

$('body a').click(function(e) {     
    //if link is reference to page element
    if ($(this).attr('href').charAt(0)=="#") {
        return;
    }

     //check if link is to same window    
     var pathname = window.location.pathname;
     var pathname2 = $(this).attr('href');
     pathname2 = pathname2.replace(/^.+\.\//, '');
     if (pathname.indexOf(pathname2) >= 0) {
        //link clicked is contained on same page
        //prevent page from getting reloaded & losing data
        e.preventDefault();
        e.stopImmediatePropagation();
        e.stopPropagation();    
        return;     
    }

    //link clicked on is another page
    if (hasMerchandise) {  //var to indicate user has items on order form       
        //give user options: leave page, open link in other page, stay, etc.
        // $('.popupForm-handleExitRequest').click();   //roll your own code    

        //prevent page from getting reloaded & losing data
        //in case user wants to cancel page change or open link in another window
        e.preventDefault();
        e.stopImmediatePropagation();
        e.stopPropagation();            
    } else {
        //load new page
        $(this).removeAttr('target');
    }       
});
于 2014-04-24T20:38:40.140 回答
0

您可以使用在新窗口中打开的链接替换某些区域中的所有链接,而不是使用一组完全不同的页眉/页脚,如下所示:

$('#header a, #footer a').each(function() {
  $(this).attr('target', '_blank');
});
于 2013-11-06T04:35:58.747 回答