【问题标题】:onclick javascript function does not work with Firefox/IEonclick javascript 函数不适用于 Firefox/IE
【发布时间】:2023-03-17 02:46:01
【问题描述】:

我的验证码重新加载操作有问题。它适用于 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>

【问题讨论】:

  • onclick 只能运行 Javascript。使用“javascript:”是多余的。
  • 在控制台中你得到什么错误?函数 reloadCaptcha() 未定义???或者你的脚本没有效果?,尝试在你的脚本中包含一个警报('xxx');看看它正在运行
  • 虽然您不需要 javascript: 部分,但它仍应执行。也许浏览器正在缓存图像,因为您没有将 img src 更改为新的东西。如果从控制台手动调用该函数是否有效?
  • alert 有效,必须与 img 相关
  • 你需要返回false!

标签: javascript html button onclick reload


【解决方案1】:

我怀疑问题可能出在缓存上。您可以通过向新的 img src 添加时间戳来解决此问题,如下所示:

function reloadCaptcha() {
    var img = document.getElementById('captcha'),
        timestamp = new Date().getTime();
    img.src = 'resources/templates/captcha/Captcha.php?' + timestamp;
 }

【讨论】:

  • 谢谢!这有帮助。现在唯一的问题是,如果我点击了垃圾邮件按钮,它不会刷新,但应该没问题。
  • 是的,根据您的浏览器,时间戳仅每 15-60 毫秒更新一次。不幸的是,Javascript 的内置随机数生成器也有同样的问题。您可以通过添加一些代码来检测重复项来解决此问题,但这可能不是必需的。
【解决方案2】:

你的语法不好。

选项 1:

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

选项 2:

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

选项 3:使用 EventHandler API。

【讨论】:

  • 永远不要在 href 中使用 javascript: 协议 - 它会部分卸载页面并有许多其他缺点
  • 这里的语法没有问题。事件处理程序中的 javascript: 部分将被忽略。见stackoverflow.com/questions/2321469/…
  • @mplungjan 你有这个说法的来源吗?
  • href:javascript 肯定不会被忽略! onclick="javascript: 将
  • 你确定@mplungjan 吗?我更喜欢 a href=javascript 解决方案。不会更改我的网址并刷新就好了。
【解决方案3】:

除了避免缓存,您还需要在 onclick 中返回 false

<a href="#" 
onclick='reloadCaptcha(); return false'><img 
src="../backend/resources/media/captcha_refresh.png"></a>

【讨论】:

  • 您对问题的描述很差。您需要避免缓存以刷新但也返回 false 以不跟随链接
  • 抱歉,我不知道问题出在哪里。我试图摆脱我所拥有的。还是谢谢你。
【解决方案4】:

我在 Firefox 和 Internet Explorer 上遇到了同样的问题。我使用了事件处理程序,我解决了我的问题。使用

evt.preventDefault(); 
return false;

在您的 javascript 函数中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多