2014-01-12 5 views
1

У меня есть 2 ссылки, обе из которых ведут к странице контакта, однако в контактной форме будут отображаться различные поля в соответствии с нажатой ссылкой. Есть ли возможность определить, какая ссылка была нажата с 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 на странице контактов. –

+0

Что случилось с передачей его в URL-адресе? Безопасная ставка, если вы не хотите работать с файлами cookie, которые пользователи могут не принимать. – NewInTheBusiness

ответ

2

В основном у вас есть три варианта (или два, в зависимости от того, как вы хотите посчитать):

  1. Самое лучшее, что то, что вы сказали, что вы не хотите делать: Сделайте URL, немного (возможно, с строкой запроса), а затем просмотрите location/location.search на странице контактов, чтобы узнать, что они нажали.

    Это не должно быть столь же очевидным, как параметр строки битового запроса; он может быть более тонким, например example.com/contact.html против example.com/contactb.html. Если вы хотите, чтобы одна и та же фактическая страница служила для обоих этих URL-адресов, вы можете настроить сервер, чтобы сделать его псевдоним другого.

    Обратите внимание, что это лучше не просто прагматично (оно работает надежно), а потому, что URL-адреса этих двух страниц различны. Поскольку страницы отличаются друг от друга, их уникальный идентификатор (их URL-адрес) различен.

  2. Это вариант на # 1: вместо строки запроса или имени другой страницы используйте хэш-фрагмент, например. example.com/contact.html#A и example.com/contact.html#B. На странице контактов можно проверить, что с помощью location.hash. (Make sure you don't have any elements with the ид «А» or «B» ', так что страница не прокручивается вниз к ним.)

  3. С другой стороны, установить информацию при нажатии на ссылку, что на странице контактов может искать. Это может быть печенье с коротким сроком действия, или 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, и я ищу различные решения на выбор. Куки, например, не лучшее решение, поскольку многие люди склонны их блокировать. Хранилище сеансов или веб-хранилище могут быть хорошим решением. Вопрос в том, делают ли мобильные браузеры, такие как Chrome, Opera, Firefox, Safari, Dolphin, Puffin, Skyfire и т. Д., Поддерживают хранение сеансов и/или хранилище в Интернете? – Igal

1

Добавьте класс ваши ссылки, как class="detector" и ид, как и 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.

Создать .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/ и переписывает его в качестве параметра URL-адрес для index.php (например index.php?form=sales)

Вы можете теперь явно использовать ссылки, как это в вашем HTML:

И в контактную форму index.php, вы можете обрабатывать различные $_GET параметры:

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

Некоторые немедленные преимущества:

  • Вам нужно только управлять одним файлом, и это не зависит от связки вложенных include s.
  • Решение весы; для обработки другой переменной формы контакта требуется всего несколько операторов if.
  • Он защищен от обработки на стороне клиента.
Смежные вопросы