[英]Javascript not working in IE 11, but works on Chrome and FF
[英]Javascript/AJAX not working in Opera, works perfect in FF/IE/Chrome
我目前在名为getresults.js的文件中包含以下Javascript:
function getItems(str)
{
if (str=="")
{
document.getElementById("getItems").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("getItems").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/include/retrieveitems.php?q="+str,true);
xmlhttp.send();
}
此事件要求它:
onclick="getItems('all')"
它在Firefox,IE,Chrome ..中完美运行,但是Opera拒绝运行。 我的访问者中有一小部分是Opera用户,但仍然..我希望它能正常工作。 可以在以下网址找到实时网址: http : //tf2g.com/gallery
如果有人可以提供帮助,则非常有义务!
失败的原因是事件处理程序根本没有调用getItems()方法。 它从Opera的Microdata支持 ( http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html )中看到document.getItems()方法,然后调用该方法。 这是JavaScript范围的问题:元素本身及其文档都在范围内,因此此处定义的方法/属性将能够隐藏您在全局范围内定义的方法/属性。
很高兴Opera尽早实施Microdata,所以您注意到了这一点:)
最简单的解决方法是重命名函数,以避免名称与Microdata冲突。 您也可以使用addEventListener()而不是在标记中编写onclick =“”-如果您执行此功能的作用域是在其中创建该作用域,那么您就不会遇到此类陷阱。
window.addEventListener('load', function(){
for( var i=0,l;l=document.links[i]; i++ )if( l.hash){
l.addEventListener( 'click', function(){
getItems(this.hash.substr(1));
}, false);
}
}, false);
我稍微调试了一下您的链接,发现AJAX请求没有问题。 实际上,jquery.min.js文件中存在未处理的异常,该异常会阻止其他javascript代码运行。
我执行的步骤:我打开了类似于Firebug的Opera DragonFly(Ctrl + Shft + I)并刷新了页面。 我在“ getItems()”中插入了断点,发现代码没有到达那里。 通过蜻蜓控制台,我写了“ getItems('all');”。 而ajax达到了预期。
Ø
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.