【问题标题】:How to Remove a Cookie on Submit?如何在提交时删除 Cookie?
【发布时间】:2014-02-12 06:43:20
【问题描述】:

早安,

我在提交表单时尝试删除 cookie,但它不起作用。

这是我的代码:

$("form").submit(function()
{

  var cookiePath = "Table_Rows-"+$(location).attr('pathname');
  alert(cookiePath);
  $.removeCookie(cookiePath);
}

即使我使用这些代码删除了所有 cookie,它仍然不起作用:

 $("form").submit(function()
{
  for (var it in $.cookie()) $.removeCookie(it);
}

我将我的数据设置为通过 onbeforeuload 函数保存在 cookie 中

window.onbeforeunload = function(event)
{
storeRowData();
console.log("cookie saved!");
};

这是我的 StoreData() js

var storeRowData = function () {
 var data = []; 
$('#tblItemList tbody>tr').each(function () {
    var $this = $(this),

        pId = $this.find("#itemId").val();
        pname = $this.find('input.itemSearch').attr("value"),
        desc = $this.find(".description").val(),
        quant = $this.find(".qty").val(),
        rowId = $this.find(".rowId").val(),
        deleted = $this.find(".hidden-deleted-id").val(),
        price = $this.find(".price").val();

    var temp = { 
        productName: pname, 
        itemId:pId,
        description: desc,
        quantity: quant, 
        price: price,
        deleted:deleted, 
        rowId: rowId };
    data.push(temp);
});
var cookiePath = 'Table_Rows-'+$(location).attr('pathname');
$.cookie(cookiePath, JSON.stringify(data), {expires: 7});
}

然后我检查是否在 document.ready 函数的页面上设置了 cookie:

if($.cookie('Table_Rows-'+$(location).attr('pathname'))){
loadCookieData();
$(".qty, .price").bind("keyup change", calculate);
}
else{
addRow(0);
}

还有我的 loadCookieData()

var cookiePath = 'Table_Rows-'+$(location).attr('pathname');
//console.log("loadCookieData:"+cookiePath);
temp = $.cookie(cookiePath);
var parseData = JSON.parse(temp);
//console.log(parseData);
var html ='';



for (i in parseData) {

    subTotal = parseData[i].quantity*parseData[i].price;
    var st = new Number(subTotal);
    var sub = st.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');

    html+= (some html code to replace here)   
 }
$("#tblItemList tbody").html(html);

  for (i in parseData){
  var inputBox = "#itemName"+parseData[i].rowId;
  $(inputBox).select2(sOptions);
}
calculate(); 
}

我当前的代码有问题吗??

谁能告诉我如何正确地做到这一点?非常感谢!

【问题讨论】:

  • cookiePath 是 cookie 名称吗?
  • 注意:如果我没记错的话,如果您不在与设置 cookie 相同的子域/域或路径上,则无法修改/删除某些 cookie。
  • 有时简单的 javascript 更简单 $(location).attr('pathname') -> location.pathname
  • 会不会是您正在删除 cookie 并将其重新设置为 onbeforeunload?
  • 我的建议是不要使用 onbeforeunload,因为它在某些浏览器或浏览器版本中存在一些问题。我认为 Opera 甚至在他们更改为 webkit 之前都没有它,如果这对你来说不是问题,你可以做 onbeforeunload = nullstoreRowData = $.noop

标签: javascript jquery cookies


【解决方案1】:

改变了我的答案,因为它不再是一个限制性问题

document.cookie = cookiePath + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";

【讨论】:

  • 我会在我的 .submit 函数中添加这段代码吗?对不起,我有点困惑:3
  • 这只是一个测试,看看您是否设法删除所有 cookie。你可以在控制台的任何地方运行它,提交事件
  • 这不会只删除您要删除的那个 cookie。也看看有没有可能
  • 您的代码确实删除了 cookie.. 能否请您自定义,以便我可以专门删除一个 cookie?非常感谢您的帮助!
  • 实际上确实尝试过将此代码:for (var it in $.cookie()) $.removeCookie(it); 放在 document.ready 上,它也有效!也删除了所有cookies。我唯一的问题是当我把它放在submit function 上时它不会工作
猜你喜欢
  • 2012-09-17
  • 2010-12-04
  • 2011-01-29
  • 2018-11-28
  • 2013-10-23
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
相关资源
最近更新 更多