簡體   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