[英]Browser won't set cookie from an onclick event
我正在用这个虫子把头发拉出来,尽管我确信这是显而易见的。 如果是,请道歉。
以下 javascript 成功设置了我的 cookie:
<script type="text/javascript">
$(document).ready(function(){
$.post('../setCookie.php',{'region':'test'});
});
</script>
但是一旦我将相同的代码绑定到onclick
事件,就像这样......
<script type="text/javascript">
$(document).ready(function(){
$("#us a").click(function(){
$.post('../setCookie.php',{'region':'en-us'});
});
$("#uk a").click(function(){
$.post('../setCookie.php',{'region':'en-gb'});
});
});
</script>
<ul>
<li id="uk"><a href="http://www.example.com/uk">
<span>Enter UK site</span></a></li>
<li id="us"><a href="http://www.example.com/us">
<span>Enter US site</span></a></li>
</ul>
..它不再设置cookie! 即使相同的代码以完全相同的方式被称为执行(我逐步完成它,并看到它应该是的一切)。
重复:javascript 开火良好。 我正在逐步完成 setCookie.php 并且一切都一样......除了最后没有cookie。
这是怎么回事? 我猜是浏览器安全还是什么?
对于任何有兴趣的人,这是我解决它的方法:
<script type="text/javascript">
$(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";
}
);
});
});
</script>
我没有看到任何阻止正常链接点击的东西? 如果您没有什么可以阻止正常a href
到 go 的通过,那么在页面更改之前将没有任何时间来执行$.post
请求。
尝试以下操作:
$(document).ready(function(){
$('a').click(function(e){
e.preventDefault();
$.post('../setCookie.php',{'region':'test'});
});
});
它将停止页面更改链接,但至少应该通过 cookie。 现在,如果您希望页面也被加载,那么在请求中添加一个 onComplete 方法,这样一旦成功发送了 cookie 数据,您就可以继续页面更改。
将此代码放在 < script > 标签所在的位置:(我假设 < head >)
$(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 开发工具)
我想在这种情况下我会做的是改变点击事件并将其放在这里:
<script type="text/javascript">
$(document).ready(function(){
$("#someid > li").click(function(){
$.post('../setCookie.php',{'region':$(this).attr("id")});
});
});
</script>
接着..:
<ul id="someID">
<li id="uk"><a href="http://www.example.com/uk">
<span>Enter UK site</span></a></li>
<li id="us"><a href="www.example.com/us">
<span>Enter US site</span></a></li>
</ul>
我建议不要在 HTML 中使用 JavaScript \ jQuery,只需使用 document.ready() 并绑定您的事件(如果您使用 HTML)
很可能是因为它试图在创建之前访问 jQuery ( $
)。 最好使用您的第一个示例中的document.ready
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.