苦恼啊!!!项目做完测试发现js在各大浏览器上存在不兼容问题!!function CheckImgCss(o)
{
if (!/\.((jpg)|(bmp)|(gif)|(png))$/ig.test(o.value))
{
alert('只能上传jpg,bmp,gif,png格式图片!');
o.outerHTML = o.outerHTML;
}
}
这段js在FF浏览器上只提示类型不对,FileUpload不清空!!
alert在opera浏览器上出现“停止执行此页面中的脚本”钩上后js没用了!!直接提交了!!
哪位大虾帮帮忙!!%>_<%

解决方案 »

  1.   

    outerHTML只有ie浏览器才有效,其他不认的。
      

  2.   

    那有什么办法解决吗?
    难道都换到后天判断%>_<%
      

  3.   

    如果要兼容各浏览器,可以这样取得outerHTML。
    var tempDiv=document.createElement("div");
    tempDiv.appendChild(o.cloneNode(true));
    用tempDiv.innerHTML获取o的outerHTML。
      

  4.   

    使用比较成熟的js框架,如jquery,dojo,prototype等。。
      

  5.   

    if (window.HTMLElement) {
       HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML) {
             var r=this.ownerDocument.createRange();
             r.setStartBefore(this);
             var df=r.createContextualFragment(sHTML);
             this.parentNode.replaceChild(df,this);
             return sHTML;
         });     HTMLElement.prototype.__defineGetter__("outerHTML",function() {
         var attr;
             var attrs=this.attributes;
             var str="<"+this.tagName.toLowerCase();
             for (var i=0;i<attrs.length;i++) {
                 attr=attrs[i];
                 if(attr.specified)
                     str+=" "+attr.name+'="'+attr.value+'"';
             }
             if(!this.canHaveChildren)
                 return str+">";
             return str+">"+this.innerHTML+"</"+this.tagName.toLowerCase()+">";
             });   HTMLElement.prototype.__defineGetter__("canHaveChildren",function() {
         switch(this.tagName.toLowerCase()) {
             case "area":
             case "base":
             case "basefont":
             case "col":
             case "frame":
             case "hr":
             case "img":
             case "br":
             case "input":
             case "isindex":
             case "link":
             case "meta":
             case "param":
             return false;
         }
         return true;
       });
    }
      

  6.   

    可以用一下upload插件、或者判断验证后缀可以用validate jquery插件验证,如果什么插件都不用,可以如上说的,换种方式用jquery实现。
      

  7.   

    第一个问题自己已经解决,还是谢谢各位的讨论。~.~
    将解决方法贴出来:
    将js方法改为
    function CheckImgCss(upid,spanid)
    {
    if (!/\.((jpg)|(bmp)|(gif)|(png))$/ig.test(document.getElementById(upid).value))
    {
    alert('只能上传jpg,bmp,gif,png格式图片!');
    var html=document.getElementById(spanid).innerHTML; 
            document.getElementById(spanid).innerHTML=html;
    return false;
    }
    }
    然后在前台页面放一个span将FileUpload包起来就行,O(∩_∩)O~可惜第二个问题不知道有什么好的方法解决%>_<%
      

  8.   

    js  alert弹出窗口在opera浏览器上出现“停止执行此页面中的脚本”选择项这个问题有什么好的解决方案没啊!!现在这分全在这个问题上了。。汗!!