2014-01-12 91 views
1

我有两个链接,它们都会导致联系页面,但根据点击链接,联系表单中会显示不同的字段。是否有可能检测点击该URL的链接:mysite.com/contact.html而不是mysite.com/contact.html?link=1?也许以某种方式与JavaScript?检测点击了什么链接

+0

您可以使用.htaccess重写url链接。看看这个:http://stackoverflow.com/questions/11116087/url-rewriting-doesnt-rewrite-automatically – Cecil

+0

你可以在每个链接的onclick事件中分配一个cookie,然后检查联系页面中的cookie。 –

+0

在URL中传递它有什么问题?如果您不想使用用户可能不会接受的cookie,最安全的选择。 – NewInTheBusiness

回答

2

基本上,你有三种选择(或两个,这取决于你想怎么算):

  1. 的最好的事情,这就是你说的你不想做的事:做的稍微的网址不同(可能带有查询字符串),然后查看联系人页面中的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; 
    

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

+0

正如我所见,Igal正在寻找一种JavaScript基于解决方案就我所知,会话变量在更高级别的数据存储中。 –

+0

@PatarticsMilán:查看链接。这是* web *会话存储,完全是客户端,并通过JavaScript访问。 –

+0

我不是专注于JavaScript,我正在寻找各种解决方案供您选择。例如,饼干不是最好的解决方案,因为许多人倾向于阻止它们。会话存储或Web存储可能是一个很好的解决方案。问题是:诸如Chrome,Opera,Firefox,Safari,Dolphin,Puffin,Skyfire等移动浏览器是否支持会话存储和/或网络存储? – Igal

1

添加一个类你的链接像class="detector"和IDS像和id="B"不是使用一个jQuery事件传递的信息。

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

这将使用尽可能多的链接,如你所愿。

+1

jQuery-only对非jQuery问题的回答没有用处。 –

0

我知道你正在寻找使用JavaScript这样做,但在服务器端的替代(这将让你在未来更灵活):

建立一个单一的PHP脚本处理的接触形式,根据具体的url显示不同的表单字段。假设它位于example.com/contact/index.php

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

这里做的事情,是捕捉一个虚拟文件夹/contact/后并重写它作为一个URL参数index.php(如index.php?form=sales

像这样的东西创建/contact文件夹内的.htaccess文件

现在你可以明显地使用像这些在你的HTML链接:

而且在您的联系方式index.php,可以处理不同的$_GET参数:

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

一些直接的好处:

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