在改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也可以这样处理。当然,如果大家有什么更好的解决方案也可以提出来分享一下:)
分享到:
相关推荐
在IE 6.0、Firefox 2.0、Mozilla 1.5等浏览器中,一些基础的JavaScript API和DOM操作方法存在差异。开发者在进行DOM操作时,常用到的`document.all`、`document.getElementById`、`document.getElementsByName`等...
然而,由于浏览器之间的差异,尤其是IE和Firefox(FF)之间的兼容性问题,正确使用`document.createElement()`需要注意一些细节。 在IE中,你可以直接在`document.createElement()`的参数中包含元素的所有属性,如...
由于浏览器之间存在兼容性问题,尤其是旧版本的IE浏览器,因此在开发中,为了保证获取样式的兼容性,通常需要编写额外的代码来判断浏览器类型,并执行相应的获取样式的代码。在文章中给出的`getStyle`函数就是一个...
体育教学特点及规律.pptx
不确定噪声扰动下的电力变换器故障检测.pdf
内容概要:本文详细介绍了14bit 100M SAR ADC的Matlab建模过程。首先解释了高精度ADC在高速、高分辨率信号处理中的重要性,特别是在医学成像、雷达探测和通信系统等领域。接着阐述了Matlab作为强大工程计算工具,在ADC建模和仿真的优势。随后逐步讲解了建模的具体步骤,包括定义参数、建立模型框架、添加细节以及测试验证。最后提供了一个简单的Matlab代码片段,展示了如何用Simulink创建基本的SAR ADC模块。 适合人群:对ADC建模感兴趣的电子工程师、研究人员和技术爱好者。 使用场景及目标:适用于希望深入了解ADC工作原理并掌握其建模技巧的人群,旨在提升他们在相关领域的技术水平和创新能力。 其他说明:文中提供的代码仅为示例,实际应用时需根据具体需求进行调整和完善。
输入某年某月某日,判断这一天是这一年的第几天
软考初级程序员相关文档
贴片式发光二极管-中文数据手册
内容概要:本文详细介绍了丰田Prius 2004年款永磁同步电机的设计流程和技术要点。主要内容涵盖磁路法设计、Maxwell有限元仿真、MotorCAD温升仿真以及应力分析。文中提供了Excel设计程序,帮助理解电机的基本参数计算,如体积、叠厚、匝数等。Maxwell参数化仿真模型展示了如何进行参数化槽形设置,并提供了具体的Python代码示例。此外,还包含了橡树岭实验室提供的官方实测数据和拆解报告,有助于验证仿真模型的准确性。最后,MotorCAD温升模型和应力分析报告进一步补充了电机设计的关键细节。 适合人群:电机设计工程师、高校相关专业的学生、研究机构的技术人员。 使用场景及目标:适用于希望深入了解永磁同步电机设计原理及其仿真的专业人士,旨在提高电机设计能力,掌握先进的仿真技术和优化设计方案。 其他说明:本文不仅提供了理论知识,还包括大量实用的操作指南和具体实例,便于读者更好地理解和应用。
内容概要:本文详细介绍了基于AUTOSAR架构的电池管理控制策略(BMS)的开发流程及其在量产车型中的应用。首先阐述了BMS在汽车科技领域的关键作用,特别是在保障车辆的安全稳定运行方面。接着重点讲解了BMS的开发流程,包括遵循ASPIC开发流程和满足功能安全ASIL C标准。此外,还探讨了基于AUTOSAR架构的应用层软件的设计理念,以及通过Simulink建立的实际应用模型,强调了其相较于仿真的优势。最后指出,BMS技术的进步将为汽车行业带来更多可能性。 适合人群:从事汽车电子控制系统开发的专业人士,尤其是对电池管理系统感兴趣的研发工程师和技术管理人员。 使用场景及目标:适用于希望深入了解BMS开发流程及其在实际项目中应用的技术人员,帮助他们掌握最新的技术和最佳实践方法,提高产品的可靠性和用户体验。 其他说明:文中提到的所有技术细节均来自量产车型的真实案例,而非理论仿真,因此具有较高的实用价值。
中国书画艺术作品印章真伪检测算法研究.pdf
毕业设计-米花活动V1.0.14 安装更新一体包-整站商业源码.zip
专注于欧洲五大足球联赛的综合性数据集。它涵盖了英格兰足球超级联赛(Premier League)、西班牙足球甲级联赛(La Liga)、意大利足球甲级联赛(Serie A)、德国足球甲级联赛(Bundesliga)和法国足球甲级联赛(Ligue 1)的丰富数据信息。该数据集为足球爱好者、数据分析师以及相关研究人员提供了极具价值的资源,可用于深入分析球队表现、球员能力、比赛结果预测等多个方面。 数据集包含了多个赛季的比赛数据,详细记录了每场比赛的比分、进球时间、球员表现、红黄牌情况以及球队的排名等关键信息。此外,还可能包含球队的阵容信息、球员的出场时间、传球成功率、射门次数等技术统计,这些数据能够帮助用户全面了解比赛的各个方面。通过对这些数据的分析,可以挖掘出球队的战术风格、球员的个人能力以及联赛的竞争格局等重要信息。 该数据集不仅适用于学术研究,例如用于统计分析、机器学习模型的训练和验证,还可以为足球俱乐部的管理层、教练团队提供决策支持,帮助他们更好地评估球员表现、制定战术策略。同时,对于足球博彩行业来说,这些数据也是重要的参考依据,能够帮助预测比赛结果和赔率变化。 总之,“Football Data European Top 5 Leagues”数据集是一个内容丰富、应用广泛的资源,它为足球领域的数据分析和研究提供了坚实的基础。
毕业设计-叮当活动报名V1.0.5 安装更新一体版-整站商业源码.zip
毕业设计-电竞-整站商业源码.zip
内容概要:本文详细介绍了kw级别双馈永磁风电机组与永磁同步发电机(PMSG)的并网仿真模型。模型涵盖了一个由6台1.5MW双馈风机构成的9MW风电场,机端电压为690V,经过升压变压器连接到120KV交流电网。文中探讨了短路故障模型,包括三相电压电流特性、离散模型和phasor模型,能够模拟多种短路情况。此外,还涉及了风速模块,支持渐变风、阵风等多种风速条件下的仿真实验。所有模型均采用双闭环控制(功率外环和电流内环),并带有最大功率跟踪(MPPT)控制,以确保高效率运行。最后,文章强调了模型的模块化设计,便于各部分独立编写和调试。 适合人群:从事风能领域的研究人员、工程师和技术人员,尤其是关注风电机组并网仿真和短路故障分析的专业人士。 使用场景及目标:适用于风电场的规划、设计、培训和测试,帮助相关人员深入了解双馈永磁风电机组和PMSG的并网行为及短路故障应对措施。 其他说明:该模型不仅可以用于学术研究,还能应用于实际工程项目的仿真和验证,有助于提高风电系统的稳定性和可靠性。
在华为手机使用Google Play应用,必须的两个安装包