解决诡异的Firefox “true” Bug ,哈哈!

近日在做跨浏览器的相关工作。
遇到一诡异bug。
环境: IE9、Chrome、Safari均未见异常,唯有FireFox4.0异常
现象:某一input (hidden)的value值自动变为"true",无论使用firebug查看,还是alert出来,均为"true" , 查看源代码却无论如何都是原来的值。
上下文: <input type="hidden" class="Qid" value="${myparam.aucId}" />
              使用Jquery在某一时刻获取所有Class为"Qid"的值,拼接字符串后传入后台处理。偶然发现不能格式化为数字。
               java.lang.NumberFormatException: For input string: "true"
              使用FireBug断点查看JS脚本,在提交表单之前 $(".Qid").each(function(){....});中获取值时唯有第一个value能够正常取到,
              其余所有值均变为”true“。发生的时机,未登录用户名之前无论如何刷新页面,不出现异常。登录之后,偶有异常。
              进而研究发现使用某一Ajax方法提交表单到后台后,自动刷新页面时,会出现该问题。于是认为是这个方法的问题。
              确认后台传递到前台的参数值不会产生影响后,确认该ajax方法的返回处理函数(callback)被调用后,即会出现该问题。该ajax方法如下:
function marsor_do_asylogin(callback)
{
       $.ajax({
           type:"GET",
           cache:false,
           dataType:"json",
           url:"member_asyLogin.action",
           data:"name="+$('#marsor_username').val()+"&password="+$('#marsor_password').val(),
           success:function(ret){
               if(ret.result==true)
                {
                   if(typeof(ret.token)==="undefined")
                       {
                         window.global_user_mark_worm = Math.random().toString();
                       }
                   else
                       {
                          window.global_user_mark_worm = ret.token;
                       }
                   if(typeof(callback)==="function")
                       {
                          callback();
                       }
                }
               else
               {
                   alert("用户名或密码错误");   
               }
           },
           error:function(e)
           {
               alert("出错了!");
           }
       });
}
研究过程:  起初以为是后台变量的问题,小研究排除后,继续研究javascript,未见异常(做一其他ajax方法调用后台,无异常)。奇就奇在这个方法根本不可能对$(".Qid")进行赋值、处理。callback方法为一句简单的alert。百思不得其解。实验其他浏览器,均无异常。疑为FireFox4.0的bug。突然发现所有的input都是用class进行存取,没有name和id属性。顺手加上,测试,一切正常。我晕TMD。
问题解决。
分析原因:当input标签没有name和id的时候,在使用firefox4.0时,会在某一特定的时候(猜测是调用callback)出现input值为"true"的罕见问题。
posted @ 2011-04-29 16:34  地球火星人  阅读(391)  评论(0编辑  收藏  举报