Браузер не будет устанавливать cookie из события onclick

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

Следующий 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, и все одно и то же … кроме печенья в конце его.

Что происходит? Я предполагаю, что это безопасность браузера или что-то в этом роде?


Для всех, кто интересуется, вот как я решил это:

 <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 , то не будет времени на выполнение запроса $.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 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)

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