检测点击了哪个链接

时间:2014-01-12 08:22:17

标签: javascript html hyperlink

我有两个链接,两个链接都指向联系页面,但根据点击的链接,联系表单中将显示不同的字段。是否有可能检测到点击了哪个链接的网址如下:mysite.com/contact.html而不是mysite.com/contact.html?link=1?或许以某种方式使用JavaScript?

3 个答案:

答案 0 :(得分:2)

基本上你有三个选择(或两个,取决于你想要的方式):

  1. 最好的事情,就是你所说的你不想做的事情:使URL略有不同(可能带有查询字符串),然后查看location / location.search在联系页面中查看他们点击的内容。

    它不必像位查询字符串参数那样明显;它可能更精细,例如example.com/contact.htmlexample.com/contactb.html。如果您希望为这两个URL提供相同的实际页面,则可以将服务器配置为使其成为另一个的别名。

    请注意,这不仅仅是实用的(它可靠地工作),但因为这两个页面的URL不同。由于页面不同,因此使其唯一标识符(其URL)不同是有意义的。

  2. 这是#1的变体:使用散列片段代替查询字符串或不同的页面名称,例如example.com/contact.html#Aexample.com/contact.html#B。联系人页面可以通过location.hash. (Make sure you don't have any elements with the id “A”or“B”`来检查,因此页面不会向下滚动到它们。)

  3. 或者,在点击联系页面可以查找的链接时设置信息。这可能是一个短期过期的Cookie,或session storage

    以下是会话存储的外观。在第一页上,设置会话变量:

    // (The value must be a string.)
    sessionStorage.contactType = "some value to tell you what contact type";
    

    在联系页面上,检索会话变量:

    var contacttype = sessionStorage.contactType;
    

    请注意,这完全是客户端的。有关详细信息,请参阅上面的链接。

答案 1 :(得分:1)

class="detector"id="A"以及id="B"之类的链接中添加一个类,而不是使用jquery事件来传递信息。

$('.detector').click(function(){
    e.preventDefault(); // prevent default anchor behavior
    location.href=$(this).attr('href') + '?link=' + $(this).attr('id');
});

这将适用于您想要的任意数量的链接。

答案 2 :(得分:0)

我意识到你正在考虑用javascript做这个,但是服务器端替代方案(将来会让你更灵活):

构建一个处理联系表单的php脚本,根据具体的URL显示不同的表单字段。我们假设它位于example.com/contact/index.php

.htaccess文件夹中创建一个/contact文件,其内容如下:

RewriteEngine On
RewriteBase /contact/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  /([^/]+)/?$  [NC]
RewriteRule .*  /contact/index.php?form=%1  [L]

这样做,是在/contact/之后捕获虚拟文件夹,并将其重写为index.php的网址参数(例如index.php?form=sales

您现在可以在html中明显使用这些链接:

在您的联系表单index.php中,您可以处理不同的$_GET参数:

if (isset($_GET['sales']))
{
    //do this
}
else if (isset($_GET['support']))
{
    //do that
}

一些直接的好处:

  • 您只需要管理一个文件,它不依赖于一堆嵌套的include
  • 解决方案;它只需要几个if语句来处理另一个联系表单变量。
  • 它受到客户端操作的保护。