我目前在名为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
如果有人可以提供帮助,那就非常有帮助!
答案 0 :(得分:3)
失败的原因是事件处理程序根本没有调用你的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);
答案 1 :(得分:2)
我稍微调试了你的链接,发现AJAX请求没有问题。 实际上,jquery.min.js文件中存在未处理的异常,这会阻止其他javascript代码运行。
我做的步骤: 我打开了Opera DragonFly(Ctrl + Shft + I),这就像firebug-a-like并刷新页面。我在'getItems()'中插入了断点,看到代码没有到达那里。 通过Dragonfly控制台,我写了“getItems('all');”而ajax就像预期的那样。
0