浏览器不会从onclick事件中设置cookie

我正在用这个虫子把头发拉出来,虽然我确信这是显而易见的。 道歉,如果是的话。

以下javascript成功设置了我的cookie:

 $(document).ready(function(){ $.post('../setCookie.php',{'region':'test'}); });  

但是,只要我将相同的代码绑定到onclick事件,就像这样……

  $(document).ready(function(){ $("#us a").click(function(){ $.post('../setCookie.php',{'region':'en-us'}); }); $("#uk a").click(function(){ $.post('../setCookie.php',{'region':'en-gb'}); }); });   

..不再设置cookie! 即使相同的代码被称为以完全相同的方式执行(我逐步完成它,并查看它应该是的所有内容)。

重复:javascript正好点火。 我正在逐步完成setCookie.php,一切都是一样的…除了最后没有cookie。

这是怎么回事? 我猜这是浏览器的安全性还是什么?


对于任何有兴趣的人,这是我如何解决它:

  $(document).ready(function(){ $("#us a").click(function(e){ e.preventDefault(); $.post('../setCookie.php',{'region':'en-us'}, function() { window.location = "http://www.example.com/us"; } ); }); $("#uk a").click(function(e){ e.preventDefault(); $.post('../setCookie.php',{'region':'en-gb'}, function() { window.location = "http://www.example.com/uk"; } ); }); });  

我没有看到任何阻止正常链接点击通过的东西? 如果你没有阻止正常a href通过,那么在页面改变之前就没有时间做$.post请求了。

请尝试以下方法:

 $(document).ready(function(){ $('a').click(function(e){ e.preventDefault(); $.post('../setCookie.php',{'region':'test'}); }); }); 

它将停止链接的页面更改,但至少应该传递cookie。 现在,如果您还希望加载页面,则在请求中添加onComplete方法,以便在成功发送cookie数据后,您可以继续更改页面。

将此代码放在

 $(document).ready(function(){ $("#us a").click(function(){ $.post('../setCookie.php',{'region':'en-us'}); }); $("#uk a").click(function(){ $.post('../setCookie.php',{'region':'en-gb'}); }); }); 

如果是安全问题,您将在控制台上看到错误(firebug \ webkit \ IE开发工具)

我想在这种情况下我会做的是改变click事件并将其放在这里:

  

然后..:

  

我建议不要在你的HTML中使用JavaScript \ jQuery,只需使用document.ready()并绑定你的事件(如果你当然使用jQuery)

很可能是因为它在创建之前尝试访问jQuery( $ )。 最好在第一个例子中使用document.ready