脚本部分在Chrome和IE中运行,但在Firefox中不运行

时间:2011-06-07 21:45:03

标签: javascript javascript-events cross-browser

以下代码在chrome和IE中有所作为,但在Firefox中没有。

这个想法是强制用户在推进之前检查“同意”框,然后按照其中一个可用的链接进行操作。

 <script type="text/javascript"> 
        function agreeCheck() 
        {

        valid = false;

        var agree = document.getElementById('agree');
            if(isAgree(agree)){
            valid= true;
            }

        return valid;
        } 

        function isAgree(elem)
        {
            if ( elem.checked == false )
                {
            Show_Stuff(agreespan, "true");
                return false;
            }
            else
            {
            Show_Stuff(agreespan, "false");
            return true;
            }
        }
        function Show_Stuff(warning,on_off)
        // Function that will swap the display/no display for
        // all content within span tags
        {

        if ((warning.style.display == "none")&&(on_off =="true"))
            {
            warning.style.display = "";
            }
        else
            {
            warning.style.display = "none";
            }


        }
</script>

    <input type="checkbox" name="agree" value="signed" id="agree">
I agree</input> <span ID="agreespan" style="display: none">
<font color="red">You must agree in order to proceed</font> 
                                    </span> 

 <button type="button" title="Proceedt" class="btn-proceed" onclick="if (agreeCheck()==true){ window.location='myURL'; } else{ return agreeCheck();}"></button>

<input type="image" src="anotherURL" title="myTitle"  onClick="return agreeCheck();"/>

注意:

  1. 显然是myURL和另一个是 实际有效的网址
  2. 在未选中此框时单击第一个按钮可防止页面继续进行,但不会在Chrome和IE的跨区中显示错误消息。在Firefox中,无论盒子状态如何,它都不会执行任何操作
  3. 在未选中此框时单击图像链接(输入类型=“图像”)在Chrome和IE中运行良好,并显示错误消息。在Firefox中,无论盒子的状态如何,都会遵循链接。
  4. 我意识到这可以用不同的方式来简化。问题是我在Magento中实现了这个,我只能单独访问代码块,所以我不能将If Else语句的各个部分组合在一个单独的函数中。
  5. 提前感谢您的帮助!


    **编辑:我将if语句(最后一行)更改为

    if (agree.checked ==true){ ...
    

    这解决了Chrome和IE中的问题,现在这些浏览器表现正常。 Firefox仍然没有做我想做的事情

2 个答案:

答案 0 :(得分:0)

问题出在isAgree函数中。请尝试以下方法:

function isAgree(elem)
{
        if (!elem.checked == "Checked")
        {
            Show_Stuff(agreespan, "true");
            return false;
        }
        else
        {
            Show_Stuff(agreespan, "false");
            return true;
        }
}

希望它能解决这个问题。该解决方案解决了这个“已检查”属性。

答案 1 :(得分:0)

span_tag.style.display用于布局目的,不隐藏或显示范围标记
它在你的情况下不起作用,因为JavaScript可能会破坏 尝试更改所有内容以使用以下代码

warning.style.visibility = "hidden";
warning.style.visibility = "visible";