Браузер не будет устанавливать cookie из события onclick - PullRequest
4 голосов
/ 29 мая 2011

Я вырываю свои волосы из-за этой ошибки, хотя я уверен, что это что-то очевидное.Извиняюсь, если это так.

Следующий 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 ]

9 голосов
/ 29 мая 2011

Я не вижу ничего, что мешало бы нормальному переходу по ссылке?Если у вас нет ничего, что мешало бы нормальному a href пройти, у вас не будет времени выполнить запрос $.post до того, как страница уже изменилась.

Попробуйте выполнить следующее:

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

Это остановит изменение страницы для ссылок, но, по крайней мере, должно передать cookie.Теперь, если вы хотите, чтобы страница также загружалась, добавьте к запросу метод onComplete, чтобы после успешной отправки данных cookie вы могли продолжить изменение страницы.

1 голос
/ 29 мая 2011

Поместите этот код там, где находятся теги : (я полагаю, )

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

    $("#uk a").click(function(){
        $.post('../setCookie.php',{'region':'en-gb'});
    });
});
0 голосов
/ 29 мая 2011

Если это была проблема безопасности, вы увидите ошибку на вашей консоли (firebug \ webkit \ IE dev tools)

Я полагаю, что в этой ситуации я бы изменил событие click и поместил его здесь:

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

Я советую не использовать JavaScript \ jQuery внутри вашего HTML, просто используйте document.ready () и связывайте ваши события (если вы, конечно, используете jQuery)

0 голосов
/ 29 мая 2011

Скорее всего, потому что он пытается получить доступ к jQuery ($) до его создания. Для этого лучше всего использовать document.ready из вашего первого примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...