[英]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.