Настройка файла cookie на основе имени ссылки, по которой щелкнули - PullRequest
4 голосов
/ 03 мая 2010

TLDR При нажатии на ссылку я хочу назначить куки с названием инструмента и значением текста по ссылке, по которой щелкнули.

Использование Jquery.1.4.2.min.js, Jquery.cookie.1.0.js


Я пытаюсь создать cookie при нажатии на ссылку (всегда будет ссылка на "page.html").

название инструмента

значение ТЕКСТА

Пока я пытаюсь использовать:

<script type="text/javascript" src="scripts/jquery-1.4.2-min.js"></script> 
<script type="text/javascript" src="scripts/jquery.cookie-1.0.js"></script>  

Link1:

<a href="page.html">link1</a>

Link2:

<a href="page.html">link2</a>

Сценарий:

$('a[href=page.html]').click(function()
{
var name = 'instrument';
var value = $(this).text();
$.cookie(name, value, { expires: 365 });
});

Когда я нажимаю на ссылку, она просто загружает ссылку, и файл cookie не устанавливается. Отладка с помощью firebug, firecookie, firequery. Никакого печенья для инструмента или чего-либо подобного не найдено. Onload я ударю

"<a href="page.html">projects</a>", но не

"$.cookie(name, value, { expires: 365 });" вообще.

Даже используя нижеприведенное: (Спасибо Sarfraz )

$('a[href="page.html"]').click(function(e)
{
 // prevent default action
 e.preventDefault();
 var name = 'instrument';
 // get link text
 var value = $(this).text();
 // set cookie
 $.cookie(name, value, { expires: 365 });
 // now go to link's location
 document.location.href = $(this).attr('href');
});

Все равно не будет создавать cookie.

Если я добавлю точку останова на $.cookie~ даже при нажатии на одну из ссылок, она не попадет в точка останова или document.location.href~.

Для Зака:

Pre Render - <script type="text/javascript" src="http://localhost/tree"></script>

После рендеринга -

"<div class="dtree">
<div class="dTreeNode"><img alt="" src="Images/base.png" id="id0"><a onclick="javascript: d.s(0);" href="home" class="node" id="sd0">Home</a></div>"

Ответы [ 4 ]

2 голосов
/ 03 мая 2010

Это хакерство, но оно работает для меня.

$(document).ready( function() {
    $('a.cookier').each( function() {
        // Kill the link's link feature.
        _href = $(this).attr('href');
        $(this).attr("rel", _href).attr("href", "javascript:void(0);");
    });
    $('a.cookier').click(function() {
        var name = 'instrument';
        var value = $(this).text();
        $.cookie(name, value, { expires: 365 });
        // Go places
        document.location.href = $(this).attr('rel');
    });
});

Моя разметка выглядит так:

<a class="cookier" href="hrrrngh.html">Shazam!</a>

Я использую аналогичный метод для «разрыва связи» моих ссылок на страницах, которые используют AJAX, но должны изящно ухудшаться.

Примечание: вы, вероятно, захотите выбрать более классный класс, чем "cookier".

Edit:

Вы можете выбрать эти <a> там с любым из них, выбрать тот, который не выберет другие вещи на странице.

.dtree img + a
.dTreeNode > a
.dTreeNode a.node
.dTreeNode a[onclick=|javascript].node
1 голос
/ 03 мая 2010
var value = $(this);

назначит объекту jQuery значение. Используйте

var value = $(this).text();

или

var value = $(this).attr('href');
0 голосов
/ 03 мая 2010

Используя ответ Zack выше, я изменил тег элемента. Единственная проблема заключается в том, что он устанавливает cookie для любой ссылки, по которой идет ссылка, независимо от того, нужна ли мне ссылка или нет, но он устанавливает cookie и работает там, где это необходимо. Если есть более чистый подход, это будет оценено.

$(document).ready( function() {
    $('a[href="page.html"]').each( function() {
        // Kill the link's link feature.
        _href = $(this).attr('href');
        $(this).attr("rel", _href).attr("href", "javascript:void(0);");
    });
    $('a').click(function() {
        var name = 'instrument';
        var value = $(this).text();
        $.cookie(name, value, { expires: 365 });
        // Go places
        document.location.href = $(this).attr('rel');
    });
});

Огромное спасибо Сарфразу и Заку за помощь, по крайней мере, у меня есть кое-что, что работает на данный момент ^^

0 голосов
/ 03 мая 2010

Попробуйте это:

$('a[href="page.html"]').click(function(e)
{
 // prevent default action
 e.preventDefault();
 var name = 'instrument';
 // get link text
 var value = $(this).text();
 // set cookie
 $.cookie(name, value, { expires: 365 });
 // now go to link's location
 document.location.href = $(this).attr('href');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...