繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM