#javascript #jquery #cookies
#javascript #jquery #файлы cookie
Вопрос:
У меня есть выпадающий список, в котором устанавливается файл cookie на основе выбора пользователя, это делает обратную отправку и настройку файла cookie на этом этапе. Чтобы дать вам немного больше контекста, веб-сайт представляет собой каталог, пользователь заходит и вводит свой выбор, а затем выполняет поиск. В верхней части отображаемых продуктов есть способ сортировки списка, именно здесь устанавливается файл cookie. Это хорошо работает в обычных ситуациях, пока клиент не выполнит новый поиск или не сбросит поиск. поскольку у сортировки есть файл cookie, который не привязан непосредственно к поиску, файл cookie сохраняется и всегда показывает, что было выбрано, даже если теперь сортировка этим методом может не выполняться после выполнения нового поиска.
Итак, я ищу помощи в том, как я могу удалить этот набор файлов cookie при выборе кнопки, эта кнопка:
<a id="dnn_ctr555_ProductSearch_rpData_cmdAdvSearch_0" class="postbacklink searchpostbacklink nb-catfilter-search" href="javascript:__doPostBack('dnn$ctr555$ProductSearch$rpData$ctl00$cmdAdvSearch','')">Search</a>
чтобы предоставить вам подробную информацию о файле cookie и работе раскрывающегося списка, смотрите Ниже:
<!-- List header -->
<select id="Selection" class="sorter" onchange="document.cookie= 'myDDIdx = ' this.selectedIndex '; path=/;';location=this.options[[this.selectedIndex]].value" style="float:right;margin-right:8px;">
<option value="">Sort by</option>
<option value="?orderby=0">Code</option>
<option value="?orderby=1">Title A-Z</option>
<option value="?orderby=2">Title Z-A</option>
<option value="?orderby=3">Brand</option>
<option value="?orderby=4">Lowest price</option>
<option value="?orderby=5">Highest price</option>
<option value="?orderby=6">Lowest Quantity</option>
<option value="?orderby=7">Highest Quantity</option>
</select>
<div style="clear:both;"></div>
<script>
var sidx = document.cookie.indexOf("myDDIdx");
if(sidx != -1)
window.onload = function () { document.getElementById("Selection").selectedIndex = document.cookie.substr(sidx 8,1); }
</script>
Любые фрагменты кода были бы очень признательны, так как я чувствую, что бьюсь головой о кирпичную стену.
Комментарии:
1.
document.cookie = 'myDDIdx=';
должен это сделать.
Ответ №1:
Оригинальный document.cookie
API отстой. Вместо того, чтобы пытаться получить к нему прямой доступ, вы должны добавить этот фрагмент:
var docCookies = {
getItem: function (sKey) {
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\s*" encodeURIComponent(sKey).replace(/[-. *]/g, "\$amp;") "\s*\=\s*([^;]*).*$)|^.*$"), "$1")) || null;
},
setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {
if (!sKey || /^(?:expires|max-age|path|domain|secure)$/i.test(sKey)) { return false; }
var sExpires = "";
if (vEnd) {
switch (vEnd.constructor) {
case Number:
sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" vEnd;
break;
case String:
sExpires = "; expires=" vEnd;
break;
case Date:
sExpires = "; expires=" vEnd.toUTCString();
break;
}
}
document.cookie = encodeURIComponent(sKey) "=" encodeURIComponent(sValue) sExpires (sDomain ? "; domain=" sDomain : "") (sPath ? "; path=" sPath : "") (bSecure ? "; secure" : "");
return true;
},
removeItem: function (sKey, sPath, sDomain) {
if (!sKey || !this.hasItem(sKey)) { return false; }
document.cookie = encodeURIComponent(sKey) "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" ( sDomain ? "; domain=" sDomain : "") ( sPath ? "; path=" sPath : "");
return true;
},
hasItem: function (sKey) {
return (new RegExp("(?:^|;\s*)" encodeURIComponent(sKey).replace(/[-. *]/g, "\$amp;") "\s*\=")).test(document.cookie);
},
keys: /* optional method: you can safely remove it! */ function () {
var aKeys = document.cookie.replace(/((?:^|s*;)[^=] )(?=;|$)|^s*|s*(?:=[^;]*)?(?:1|$)/g, "").split(/s*(?:=[^;]*)?;s*/);
for (var nIdx = 0; nIdx < aKeys.length; nIdx ) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); }
return aKeys;
}
};
Затем вы можете просто выполнить это при нажатии кнопки:
docCookies.removeItem("myDDIdx");
Кроме того, вы можете упростить исходный код установки файлов cookie примерно до следующего:
<select id="Selection" class="sorter" onchange="docCookies.setItem('myDDIdx', this.selectedIndex); location=$(this).val();" style="float:right;margin-right:8px;">
(Не уверен, в чем причина установки переменной location, хотя я упростил ее, предполагая, что у вас загружен jQuery, поскольку ваш вопрос был помечен jQuery)
Комментарии:
1. Итак, я попробовал вышеописанное, и оно устанавливает файл cookie, но не устанавливает местоположение, поэтому при обновлении выпадающий список теряется
2. Было ли это сделано раньше?
location
Для чего используется переменная? Ваш код не показывает, где он используется. Обновление страницы всегда приведет к удалению всех переменных javascript.
Ответ №2:
Если у вас есть имена файлов cookie с собой, то чистый javascript:
var Cookienames = ['cookie1', 'cookie2', 'cookie3'];
function clearCookies(Cookienames){
for(i=0; i <= Cookienames.length; i ){
document.cookie = Cookienames[i] '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
}
Вызовите эту функцию там, где вы хотите удалить файлы cookie. clearCookies(Названия блюд);
Кроме того, если вы устанавливаете кросс-браузерный файл cookie с родительским доменом, то:
function clearCookies(Cookienames){
for(i=0; i <= Cookienames.length; i ){
document.cookie = Cookienames[i] '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=".xyz.com";path=/';
}
}