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

时间:2011-05-29 00:41:36

标签: php javascript jquery cookies

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

以下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>

4 个答案:

答案 0 :(得分:9)

我没有看到任何阻止正常链接点击的内容?如果您没有阻止普通a href通过,则在页面更改之前将没有任何时间执行$.post请求。

尝试以下方法:

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

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

答案 1 :(得分:1)

将此代码放在&lt;脚本&gt;标签位于:(我假设&lt; head&gt;)

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

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

答案 2 :(得分:0)

如果是安全问题,您将在控制台上看到错误(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()并绑定你的事件(如果你当然使用jQuery)

答案 3 :(得分:-1)

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