`
xu_wccq
  • 浏览: 130907 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

getAttribute的返回值类型(Firefox与IE兼容性)

阅读更多
在改AJAXRequest的过程中,碰到了个问题,应该算是Firefox和IE之间的兼容性问题。

提交表单时,往往需要先对表单进行验证,而这个验证的过程一般是放在form标签的onsubmit属性中。

onsubmit一般是由浏览器在form的submit动作发生时自动触发,但是如果表单由我们自己来提交,比如在AJAX应用中,就是由我们自己写程序将表单转换成请求字符串,再通过XMLHttpRequest发送到服务器,那么如果在此同时不丢掉表单验证的话,就需要我们自己来获取 onsubmit属性,并去处理它。

在获取属性时,为了保证兼容性,我用getAttribute来获取标签的属性值,但是发获取了onsubmit属性之后,发现在Firefox和IE中使用getAttribute("onsubmit")所返回的返回值类型是不同的。

测试代码如下:

===================================================

// Firefox中提示框内容为string,IE中为function<br />
<form id="test" onsubmit="return validform();">
    Name: <input type="text" id="name" /><br />
    <input type="button" onclick="validate();" value="Validate" />
</form>
<script type="text/javascript">
<!--
    function validform() {
        return (document.getElementById("name").value!="");
    }
    alert(typeof(document.getElementById("test").getAttribute("onsubmit")));
//-->
</script>


===================================================

在Firefox中使用getAttribute("onsubmit")返回值的是一个字符串,而在IE中的返回值类型则是function,也就是一个函数,因此如果在IE中处理onsubmit,我们可以直接调用这个函数:

===================================================

// 注意,下面这段代码只能在IE中正常运行
<form id="test" onsubmit="return validform();">
    Name: <input type="text" id="name" /><br />
    <input type="button" onclick="validate();" value="Validate" />
</form>
<script type="text/javascript">
<!--
    function validform() {
        return (document.getElementById("name").value!="");
    }
    function validate() {
        var vaf=document.getElementById("test").getAttribute("onsubmit");
        if(vaf())
            alert("OK");
        else
            alert("Error");
    }
//-->
</script>

===================================================

但是,在Firefox中,使用getAttribute("onsubmit")返回的是一个字符串,因此就不能直接这样使用了,而应该将字符串转换成函数再去调用:

===================================================

// 注意,下面这段代码只能在Firefox中正常运行
<form id="test" onsubmit="return validform();">
    Name: <input type="text" id="name" /><br />
    <input type="button" onclick="validate();" value="Validate" />
</form>
<script type="text/javascript">
<!--
    function validform() {
        return (document.getElementById("name").value!="");
    }
    function validate() {
        // 使用new Function将字符串转换成函数
        var vaf=new Function(document.getElementById("test").getAttribute("onsubmit"));
        if(vaf())
            alert("OK");
        else
            alert("Error");
    }
//-->
</script>

===================================================

如果把上面这段代码在IE中运行,那么会发现无论是否在输入框中输入值,都会显示“Error”。

因此,如果要解决这个问题,可以在使用getAttribute获取onsubmit属性值之后,判断返回值类型是否为字符串,如果是字符串就使用new Function将它转换成函数:

===================================================
// 注意,下面这段代码在Firefox和IE中均能正常运行
<form id="test" onsubmit="return validform();">
    Name: <input type="text" id="name" /><br />
    <input type="button" onclick="validate();" value="Validate" />
</form>
<script type="text/javascript">
<!--
    function validform() {
        return (document.getElementById("name").value!="");
    }
    function validate() {
        var vaf=document.getElementById("test").getAttribute("onsubmit");
        vaf=typeof(vaf)=="string"?new Function(vaf):vaf;
        if(vaf())
            alert("OK");
        else
            alert("Error");
    }
//-->
</script>

===================================================

这样,就解决了使用getAttribute("onsubmit")返回值类型不一样的问题,对于其他回调函数如onclick也可以这样处理。当然,如果大家有什么更好的解决方案也可以提出来分享一下:)
分享到:
评论
1 楼 jojoy_828 2008-10-22  
学习了,写的不错,支持一下!

相关推荐

    Firefox和IE兼容性问题及解决方法总结

    在开发跨浏览器的应用时,尤其是基于JavaScript的网页应用,Firefox和Internet Explorer(IE)之间的兼容性问题时常出现,这给开发者带来不小的困扰。本文将针对这些常见问题提供解决方案。 1. **outerHTML属性兼容...

    ie firefox 兼容问题大全

    ### IE与Firefox兼容性问题详解 #### 一、概述 在网页开发过程中,浏览器兼容性问题一直是前端开发者面临的重要挑战之一。尤其是对于早期版本的Internet Explorer(简称IE)与Mozilla Firefox(简称Firefox)来说...

    IE和FIREFOX的JAVASCRIPT兼容性总结.pdf

    在Web开发中,JavaScript的兼容性是至关重要的,尤其是在IE(Internet Explorer)和Firefox这两个浏览器之间。由于它们对JavaScript的实现存在显著差异,开发者需要掌握这些差异并采取适当的兼容处理措施。以下是...

    IE和Firefox的Javascript兼容性总结.docx

    以上仅是部分IE与Firefox之间JavaScript兼容性问题的总结。在实际开发中,还可能遇到更多复杂的情况,如事件处理、BOM对象的差异、JSON支持、正则表达式差异等。开发者应当保持对这些问题的关注,并积极寻找可靠的...

    IE和Firefox的Javascript兼容性总结[定义].pdf

    JavaScript兼容性问题一直以来都是Web开发中的重要议题,尤其是在IE与Firefox之间。这两个浏览器对JavaScript的实现存在诸多差异,导致开发者需要进行额外的工作以确保代码在各个浏览器上的表现一致。以下是一些关键...

    IE和Firefox的Javascript兼容性总结终版.pdf

    JavaScript兼容性问题一直是Web开发中的一个痛点,尤其是在处理IE与Firefox之间差异时。本文将深入探讨两者在JavaScript函数和方法、样式访问和设置、DOM操作、事件处理以及其他方面的兼容性处理,帮助开发者解决跨...

    JavaScript在IE和Firefox(火狐)的不兼容问题解决

    标题与描述均聚焦于“JavaScript在IE和Firefox(火狐)的不兼容问题解决”,这表明文章旨在探讨并提供解决方案来处理在不同浏览器环境下的JavaScript兼容性问题,尤其是在Internet Explorer(IE)和Mozilla Firefox...

    浏览器兼容性问题收集(IE,Firefox,Chrome,Safri)

    浏览器兼容性问题收集(IE, Firefox, Chrome, Safari) 本文主要收集了浏览器兼容性问题,涵盖了 IE, Firefox, Chrome, Safari 等多种浏览器的兼容性问题。这些问题都是 WEB 开发者们经常遇到的问题,了解这些问题...

    Javascript的IE和Firefox兼容性汇编 .txt

    ### JavaScript的IE与Firefox兼容性问题详解 #### 引言 在Web开发中,确保脚本能在不同浏览器间正常运行是非常重要的。特别是对于早期版本的Internet Explorer (IE) 和 Firefox (MF),由于它们对JavaScript的支持...

    Javascript在IE和FireFox中的兼容处理

    以上只是JavaScript在IE与Firefox中兼容性问题的一部分,实际开发中可能遇到更多细节。解决这些问题需要对两种浏览器的特性有深入理解,并使用条件注释、polyfills和现代JavaScript库(如jQuery)来确保代码在各种...

    IE和Firefox在css,JavaScript方面的兼容性

    标题与描述均聚焦于“IE和Firefox在css,JavaScript方面的兼容性”,这涉及到网页开发中一个重要的议题:浏览器兼容性。在web开发中,确保代码能在不同浏览器上正常运行是至关重要的,因为用户可能使用各种不同的...

    ie 和 firefox 的javascript 兼容问题(网上下载的).doc

    ### IE和Firefox的JavaScript兼容性问题详解 #### 1. `document.formName.item("itemName")` 问题 在处理表单元素时,IE 和 Firefox 对 `document.formName.item("itemName")` 的支持存在差异。 **说明:** - **...

    兼容IE与FireFox

    ### 兼容IE与Firefox:JS...通过上述讨论可以看出,在处理IE与Firefox之间的兼容性问题时,需要细致地考虑每个细节,并编写灵活的代码来适应各种情况。希望本文能够帮助您更好地理解并解决实际开发中遇到的兼容性问题。

    Javascript在IE和Firefox浏览器常见兼容性问题总结

    JavaScript在不同浏览器之间存在一些兼容性问题,尤其是在早期版本的Internet Explorer(IE)和Firefox之间。这些问题主要体现在访问和操作DOM元素、事件处理、属性访问以及函数调用等方面。以下是一些关键点的详细...

    兼容IE和Firefox获得keyBoardEvent对象

    兼容IE和Firefox获得keyBoardEvent对象 在 JavaScript 编程中,获得keyBoardEvent对象是非常重要的,但是不同的浏览器对其支持不同。IE和Firefox是两种最常用的浏览器,它们对keyBoardEvent对象的支持存在一定的...

    js在IE与firefox的差异集锦

    自定义属性在获取时,IE可以通过常规属性获取或者使用getAttribute(),而Firefox只允许使用getAttribute()。因此,为了兼容性,推荐统一使用getAttribute()方法来获取自定义属性。 在使用eval("idName")获取元素时...

    firefox与IE对js和CSS的区别.txt

    ### Firefox与IE对JS和CSS的兼容性差异详解 #### 一、概述 随着Web技术的发展,浏览器成为了连接用户与互联网的重要桥梁。然而,不同浏览器对JavaScript(简称JS)及CSS的支持程度各不相同,这给前端开发人员带来...

    FF和IE的兼容性问题总结

    FF和IE的兼容性问题一直是前端开发者面临的重要挑战。这些浏览器在处理JavaScript、DOM操作以及事件处理等方面的差异,可能导致代码在不同浏览器上表现不一致。以下是对这些兼容性问题的详细解析和解决策略: 1. **...

    javascript和css在IE和Firefox中的不同点及解决兼容性的方案

    JavaScript 和 CSS 在不同的浏览器之间可能存在兼容性问题,尤其是在 Internet Explorer (IE) 和 Mozilla Firefox 这两个浏览器中。本文将详细探讨这些差异,并提供相应的解决策略,以确保网站在各种浏览器中都能...

Global site tag (gtag.js) - Google Analytics