除 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> <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 之外的所有浏览器上都可以正常工作