Функция javascript onclick не работает с Firefox/IE

У меня проблема с перезагрузкой Captcha. Он очень хорошо работает с Chrome, но не с Firefox или IE. Есть капча и кнопка, и я хочу обновить капчу, не перезагружая всю страницу. Я был бы счастлив, если бы мне помогли с этим. голова с кодом javascript:

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
        <link href='resources/styles.css' rel='stylesheet' type='text/css' />
        <title>...</title>
        <script language="javascript" type="text/javascript">
            function reloadCaptcha()
            {
                img = document.getElementById('captcha');
                img.src = 'resources/templates/captcha/Captcha.php';
            }
        </script>
    </head>

кнопка проверки и обновления:

<img src="resources/templates/captcha/Captcha.php" id='captcha'>
    <a href="#" onclick='javascript:reloadCaptcha();'>
        <img src="../backend/resources/media/captcha_refresh.png">
    </a>

person user2665142    schedule 08.08.2013    source источник
comment
onclick может запускать ТОЛЬКО Javascript. использование javascript: избыточно.   -  person Diodeus - James MacFarlane    schedule 08.08.2013
comment
в консоли какую ошибку выдает? функция reloadCaptcha() не определена???? или ваш скрипт не действует? попробуйте включить в свой скрипт alert('xxx'); чтобы увидеть, что он работает   -  person Emilio Gort    schedule 08.08.2013
comment
Хотя вам не нужна часть javascript:, она все равно должна выполняться. Возможно, браузер кэширует изображение, поскольку вы не меняете img src на что-то новое. Работает ли это, если вы вызываете функцию вручную из консоли?   -  person nullability    schedule 08.08.2013
comment
оповещение работает, должно быть что-то с img   -  person user2665142    schedule 08.08.2013
comment
вам нужно вернуть ложь!   -  person mplungjan    schedule 08.08.2013


Ответы (4)


Я подозреваю, что проблема может быть в кэшировании. Вы можете исправить это, добавив отметку времени к вашему новому img src, например:

function reloadCaptcha() {
    var img = document.getElementById('captcha'),
        timestamp = new Date().getTime();
    img.src = 'resources/templates/captcha/Captcha.php?' + timestamp;
 }
person nullability    schedule 08.08.2013
comment
Спасибо! Это помогло. Единственная проблема сейчас в том, что если я спаму кнопку, она не обновляется, но все должно быть в порядке. - person user2665142; 08.08.2013
comment
Да, в зависимости от вашего браузера метка времени обновляется каждые 15-60 миллисекунд. К сожалению, встроенный в Javascript генератор случайных чисел имеет ту же проблему. Вы можете обойти это, добавив некоторый код для обнаружения дубликатов, но, вероятно, это не обязательно. - person nullability; 08.08.2013

Ваш синтаксис плохой.

Опция 1:

<a href="javascript:reloadCaptcha();">

Вариант 2:

<a href="#" onclick='reloadCaptcha();'>

Вариант 3: используйте API EventHandler.

person Halcyon    schedule 08.08.2013
comment
Никогда не используйте протокол javascript: в href - он частично разгружает страницу и имеет много других недостатков - person mplungjan; 08.08.2013
comment
Синтаксис здесь не при чем. Часть javascript: в обработчике событий будет просто проигнорирована. См. stackoverflow.com/questions/2321469/ - person nullability; 08.08.2013
comment
@mplungjan у вас есть источник этого утверждения? - person Halcyon; 08.08.2013
comment
href:javascript точно НЕ будет проигнорирован! onclick=javascript: будет - person mplungjan; 08.08.2013
comment
ты уверен, что @mplungjan? Я предпочитаю решение a href=javascript. Не меняет мой URL и обновляется просто отлично. - person user2665142; 08.08.2013
comment
Абсолютно. Вот краткое изложение того, что javascript: протокол и метка делают stackoverflow.com/a/10069139/295783 - person mplungjan; 08.08.2013
comment
Я только что проверил, и должен признать, что это, похоже, меньше влияет на новейшие Chrome и FX, чем раньше. Завтра я посмотрю на IE8 и 10 в Windows. - person mplungjan; 08.08.2013

Помимо избегания кеширования, вам нужно вернуть false в onclick

<a href="#" 
onclick='reloadCaptcha(); return false'><img 
src="../backend/resources/media/captcha_refresh.png"></a>
person mplungjan    schedule 08.08.2013
comment
Ваше описание проблемы было плохим. Вам нужно избегать кэширования для обновления, но также возвращать false, чтобы не переходить по ссылке - person mplungjan; 08.08.2013
comment
Извините, я понятия не имел, в чем проблема. Я пытался вытащить то, что у меня было. В любом случае, спасибо. - person user2665142; 08.08.2013

У меня такая же проблема в Firefox и Internet Explorer. Я использовал обработчик событий и решил свою проблему. Использовать

evt.preventDefault(); 
return false;

В ваших функциях javascript.

person user3882778    schedule 27.05.2015