`
xu_wccq
  • 浏览: 133258 次
  • 性别: 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  
学习了,写的不错,支持一下!

相关推荐

    编写跨浏览器的javascript代码必备[js多浏览器兼容写法]

    在IE 6.0、Firefox 2.0、Mozilla 1.5等浏览器中,一些基础的JavaScript API和DOM操作方法存在差异。开发者在进行DOM操作时,常用到的`document.all`、`document.getElementById`、`document.getElementsByName`等...

    document.createElement()用法及注意事项(ff下不兼容)

    然而,由于浏览器之间的差异,尤其是IE和Firefox(FF)之间的兼容性问题,正确使用`document.createElement()`需要注意一些细节。 在IE中,你可以直接在`document.createElement()`的参数中包含元素的所有属性,如...

    利用原生JavaScript获取元素样式只是获取而已

    由于浏览器之间存在兼容性问题,尤其是旧版本的IE浏览器,因此在开发中,为了保证获取样式的兼容性,通常需要编写额外的代码来判断浏览器类型,并执行相应的获取样式的代码。在文章中给出的`getStyle`函数就是一个...

    体育教学特点及规律.pptx

    体育教学特点及规律.pptx

    不确定噪声扰动下的电力变换器故障检测.pdf

    不确定噪声扰动下的电力变换器故障检测.pdf

    电子工程领域14bit 100M SAR ADC的Matlab建模及其应用 Simulink

    内容概要:本文详细介绍了14bit 100M SAR ADC的Matlab建模过程。首先解释了高精度ADC在高速、高分辨率信号处理中的重要性,特别是在医学成像、雷达探测和通信系统等领域。接着阐述了Matlab作为强大工程计算工具,在ADC建模和仿真的优势。随后逐步讲解了建模的具体步骤,包括定义参数、建立模型框架、添加细节以及测试验证。最后提供了一个简单的Matlab代码片段,展示了如何用Simulink创建基本的SAR ADC模块。 适合人群:对ADC建模感兴趣的电子工程师、研究人员和技术爱好者。 使用场景及目标:适用于希望深入了解ADC工作原理并掌握其建模技巧的人群,旨在提升他们在相关领域的技术水平和创新能力。 其他说明:文中提供的代码仅为示例,实际应用时需根据具体需求进行调整和完善。

    输入某年某月某日,判断这一天是这一年的第几天

    输入某年某月某日,判断这一天是这一年的第几天

    计算机软考程序员知识点5.docx

    软考初级程序员相关文档

    贴片式发光二极管-中文数据手册.pdf

    贴片式发光二极管-中文数据手册

    丰田Prius 2004永磁同步电机设计:从磁路分析到仿真模拟与实践应用 MotorCAD

    内容概要:本文详细介绍了丰田Prius 2004年款永磁同步电机的设计流程和技术要点。主要内容涵盖磁路法设计、Maxwell有限元仿真、MotorCAD温升仿真以及应力分析。文中提供了Excel设计程序,帮助理解电机的基本参数计算,如体积、叠厚、匝数等。Maxwell参数化仿真模型展示了如何进行参数化槽形设置,并提供了具体的Python代码示例。此外,还包含了橡树岭实验室提供的官方实测数据和拆解报告,有助于验证仿真模型的准确性。最后,MotorCAD温升模型和应力分析报告进一步补充了电机设计的关键细节。 适合人群:电机设计工程师、高校相关专业的学生、研究机构的技术人员。 使用场景及目标:适用于希望深入了解永磁同步电机设计原理及其仿真的专业人士,旨在提高电机设计能力,掌握先进的仿真技术和优化设计方案。 其他说明:本文不仅提供了理论知识,还包括大量实用的操作指南和具体实例,便于读者更好地理解和应用。

    基于AUTOSAR架构的BMS电池管理控制策略开发及其在量产车型中的应用 Simulink BMS电池管理控制策略:量产车型应用层软件策略说明

    内容概要:本文详细介绍了基于AUTOSAR架构的电池管理控制策略(BMS)的开发流程及其在量产车型中的应用。首先阐述了BMS在汽车科技领域的关键作用,特别是在保障车辆的安全稳定运行方面。接着重点讲解了BMS的开发流程,包括遵循ASPIC开发流程和满足功能安全ASIL C标准。此外,还探讨了基于AUTOSAR架构的应用层软件的设计理念,以及通过Simulink建立的实际应用模型,强调了其相较于仿真的优势。最后指出,BMS技术的进步将为汽车行业带来更多可能性。 适合人群:从事汽车电子控制系统开发的专业人士,尤其是对电池管理系统感兴趣的研发工程师和技术管理人员。 使用场景及目标:适用于希望深入了解BMS开发流程及其在实际项目中应用的技术人员,帮助他们掌握最新的技术和最佳实践方法,提高产品的可靠性和用户体验。 其他说明:文中提到的所有技术细节均来自量产车型的真实案例,而非理论仿真,因此具有较高的实用价值。

    中国书画艺术作品印章真伪检测算法研究.pdf

    中国书画艺术作品印章真伪检测算法研究.pdf

    毕业设计-米花活动V1.0.14 安装更新一体包-整站商业源码.zip

    毕业设计-米花活动V1.0.14 安装更新一体包-整站商业源码.zip

    机器学习(预测模型):专注于欧洲五大足球联赛的综合性数据集

    专注于欧洲五大足球联赛的综合性数据集。它涵盖了英格兰足球超级联赛(Premier League)、西班牙足球甲级联赛(La Liga)、意大利足球甲级联赛(Serie A)、德国足球甲级联赛(Bundesliga)和法国足球甲级联赛(Ligue 1)的丰富数据信息。该数据集为足球爱好者、数据分析师以及相关研究人员提供了极具价值的资源,可用于深入分析球队表现、球员能力、比赛结果预测等多个方面。 数据集包含了多个赛季的比赛数据,详细记录了每场比赛的比分、进球时间、球员表现、红黄牌情况以及球队的排名等关键信息。此外,还可能包含球队的阵容信息、球员的出场时间、传球成功率、射门次数等技术统计,这些数据能够帮助用户全面了解比赛的各个方面。通过对这些数据的分析,可以挖掘出球队的战术风格、球员的个人能力以及联赛的竞争格局等重要信息。 该数据集不仅适用于学术研究,例如用于统计分析、机器学习模型的训练和验证,还可以为足球俱乐部的管理层、教练团队提供决策支持,帮助他们更好地评估球员表现、制定战术策略。同时,对于足球博彩行业来说,这些数据也是重要的参考依据,能够帮助预测比赛结果和赔率变化。 总之,“Football Data European Top 5 Leagues”数据集是一个内容丰富、应用广泛的资源,它为足球领域的数据分析和研究提供了坚实的基础。

    毕业设计-叮当活动报名V1.0.5 安装更新一体版-整站商业源码.zip

    毕业设计-叮当活动报名V1.0.5 安装更新一体版-整站商业源码.zip

    毕业设计-电竞-整站商业源码.zip

    毕业设计-电竞-整站商业源码.zip

    风能领域双馈永磁风电机组与PMSG并网仿真模型及其短路故障分析 PMSG 基于kw级别PMSG的9MW风电场并网仿真及短路故障分析模型。该机端通过升压变压器连接至交流电网,涵盖风速模块与故障模块,进行

    内容概要:本文详细介绍了kw级别双馈永磁风电机组与永磁同步发电机(PMSG)的并网仿真模型。模型涵盖了一个由6台1.5MW双馈风机构成的9MW风电场,机端电压为690V,经过升压变压器连接到120KV交流电网。文中探讨了短路故障模型,包括三相电压电流特性、离散模型和phasor模型,能够模拟多种短路情况。此外,还涉及了风速模块,支持渐变风、阵风等多种风速条件下的仿真实验。所有模型均采用双闭环控制(功率外环和电流内环),并带有最大功率跟踪(MPPT)控制,以确保高效率运行。最后,文章强调了模型的模块化设计,便于各部分独立编写和调试。 适合人群:从事风能领域的研究人员、工程师和技术人员,尤其是关注风电机组并网仿真和短路故障分析的专业人士。 使用场景及目标:适用于风电场的规划、设计、培训和测试,帮助相关人员深入了解双馈永磁风电机组和PMSG的并网行为及短路故障应对措施。 其他说明:该模型不仅可以用于学术研究,还能应用于实际工程项目的仿真和验证,有助于提高风电系统的稳定性和可靠性。

    microG及Gbox安装包组合

    在华为手机使用Google Play应用,必须的两个安装包

Global site tag (gtag.js) - Google Analytics