问题:在IE7中,Jquery不能用来动态操作页面元素的name属性。
项目存在问题,部分客户的机器偶尔出现问题,后台无法得到前台的数据值。
然而,开发和测试环境永远无法重现这个问题。这就是诀窍。如果不能重现,就不能调试。你不可能知道换了之后会不会有这样的问题。
考虑到与客户环境的唯一区别是js缓存问题,然后在js文件引用的所有地方添加一个当前时间参数,但是问题仍然存在。
本来规定的版本是IE8,没想到会出现版本兼容问题。当我说我们在用jquery的时候,jqeruy的出现声称解决了浏览器的兼容性问题。
该死的问题,也是真正的版本问题。因为有些页面需要使用IE8兼容模式,但是兼容模式其实就像兼容性一样,不是和IE7兼容吗?
所以我用demo在本地测试了一下。
form id=' form 1 ' runat=' server ' div id=' div ' input id=' input ' name=' 1 ' value=' 123 '/div/form script src=' http : jquery-1 . 6 . 4 . min . js '/script script $(' # input ')。attr('name ',' my name ');警报(' name:' $('#input ')。attr(' name ')' * * * html : ' $(' # div ')。html());/scriptIE8:
好的。
IE8兼容模式:
?为什么是$('#input ')。attr('name ')获取修改后的值,而$('#div ')。html()获取原始值?
F12查看生成的html
什么是submitName?显然这个名字没有变。submitName应该由jquery生成,然后在读取名称时也直接读取submitName值。
那么为什么$(“# div”)取的值中没有submitName。html()?也不知道jquery中的html方法是怎么实现的~ ~
项目中的实现类似于:
表单id=' form 1 ' runat=' server ' div id=' div ' input id=' input ' name=' 1 ' value=' 123 ' type=' text '/div id=' div 2 '/div/表单脚本src=' http : jquery-1 . 6 . 4 . min . js '/脚本脚本//alert('name:' $('#input ')。attr(' name ')' * * * html : ' $(' # div ')。html());$('#input ')。attr('name ',' my name ');$('#div2 ')。html($('#div ')。html());var nameVal=$('#div2 ')。find('input[name='myname']')。val();警报(NameVal);/script在IE8和Google浏览器中有一个正常值,但在IE8兼容模式下无法获取值。[不要问你为什么要这样赋值,这是演示的实现‘类似于’,是一个框架]
解决方案:
1.直接用jquery修改名称,然后访问名称就可以了,虽然submitName是在中间生成的。
2.您可以从$('#div2 ')开始。html($('#div ')。html());然后修改。attr('name ',' my name ');
3.html可以直接拼接。$('#div ')。html(' input id=' input ' name=' my name ' value=' 123 ' type=' text '/')
最后百度发现IE7无法用document.getElementsByName()访问动态创建和修改的js名称值。
摘要
以上就是边肖介绍的IE7中使用jQuery动态操作名字问题的解决方案。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!