除 Firefox 之外的所有浏览器中的 Javascript 错误

Posted

技术标签:

【中文标题】除 Firefox 之外的所有浏览器中的 Javascript 错误【英文标题】:Javascript error in every browser except Firefox 【发布时间】:2011-03-20 08:44:22 【问题描述】:

我正在为此拉头发。我有一些 javascript 可以异步获取事件日历的数据。基本上,当您单击一个月中的某一天时,会弹出一个小 UI,并且会在文本区域中填充检索到的数据。此 UI 上有两个提交按钮:一个用于保存更改,一个用于删除事件(如果存在)。我的目标是禁用删除按钮,除非文本区域填充了事件。这是我的代码:

function editDialog(date,vis)

    if(vis == "show")
    
        var event="Loading...";

        if (window.XMLHttpRequest)
         
            xmlhttp=new XMLHttpRequest();
        
        else
        
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        

        xmlhttp.onreadystatechange=function()
        

            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            
                event = xmlhttp.responseText;
            
            document.getElementById('editwrapper').innerhtml="<div id='editdiv'>\
            <div><span class='bold'>"+date+" </span><div style='display: inline; float: right;'><a href='#' onclick=\"return editDialog('"+date+"','hide')\">Close</a></div><hr id='line'> \
            <form method='get' action='' onsubmit=\"return editDialog(this.newdate.value, 'show')\">\
            <label for='newdate'>Jump to: </label>\
            <input type='text' name='newdate' size='10'/>\
            <input type='submit' name='go' value='Go'>\
            </form>\
            <form style='display: inline;' action='' name='saveform' method='get' onsubmit='return instantUpdate(this.date.value,this.event.value)'>\
            <textarea name='event' rows='10' cols='40' onkeypress='saveform.edit.disabled=false'>"+event+"</textarea>\
            <input type='hidden' name='date' value='"+date+"'>\
            <input type='submit' name='edit' value='Save' disabled='disabled'></form> &nbsp; <form name='deleteform' style='display: inline; float: right;' action='' method='get' onsubmit=\"return instantUpdate(saveform.date.value,'')\"> <input name='deletebutton' value='Delete' type='submit'></form>\
            </div>\
            </div>";

            if(event=="" || event=="Loading...") document.deleteform.delete.disabled = true;
        
        xmlhttp.open("GET","events.php?action=read&date="+date,true);
        xmlhttp.send();  

问题出在这句话上:

if(event=="" || event=="Loading...") document.deleteform.deletebutton.disabled = true;

Firefox 处理得很好,但 Safari、Chrome、Opera 和 IE 都非常适合。对于未启用 javascript 的用户,他们恢复为我的后备功能。我做错了什么?

【问题讨论】:

Chrome 调试器说了什么? 其实我没看。但我不是很熟悉如何使用它。我看看能不能解决。 啊,是的,jQuery。我很想使用它,但我想先正确地学习 javascript... @vince88:Jquery 是 javascript。它只是一个框架。用它。真的很值得。 不,我明白 jquery 是什么。但我想了解幕后发生的事情,而不是让一切都被易于使用的功能所掩盖。如果我接了一个没有实现 jQuery 的项目怎么办? 【参考方案1】:

多行字符串常量是非标准的。你不能在其他浏览器中这样做。

长字符串必须如下所示:

var longString = "something something something" +
  "more something something something " +
  "and so on";

【讨论】:

感谢您的建议。我会记住这一点,但我认为这不是问题所在。我改变了它,它没有任何区别。 在第 5 版中添加到 ECMAScript 标准中的行延续,因此所有浏览器都支持它还需要一段时间。 是的,我知道它在第 5 版中,但在 IE7 中对您没有帮助 :-)【参考方案2】:

我只是有一个想法。由于delete 是一个关键字,因此您真的不应该将其用作表单字段名称。在使用保留字方面,某些实现可能比其他实现更严格。尝试将其重命名为其他名称。

【讨论】:

是的,就是这个。我听取了其中一位 cmets 的建议并查看了 Chrome 的调试器。它说删除引发了异常,所以我重命名了它,它现在可以工作了。谢谢。 @vince - 祝你好运,别忘了试试 jQuery。

以上是关于除 Firefox 之外的所有浏览器中的 Javascript 错误的主要内容,如果未能解决你的问题,请参考以下文章

在日历中的特定日期显示背景颜色的问题,在除移动 Safari 之外的所有浏览器上都可以正常工作

关闭 Emacs 中除当前缓冲区之外的所有缓冲区

css 媒体查询以针对除 IE 之外的所有浏览器

选择除第一个之外的所有“tr”

如何使 JFileChooser 显示除 .huff 文件之外的所有类型的文件 [重复]

Java Spring 控制器拒绝除 GET 之外的所有请求