2014-01-12 123 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語句來處理另一個聯繫表單變量。
  • 它受到客戶端操作的保護。