2013-03-15 64 views
0

我已經試過一切,這段JavaScript代碼不起作用:Firefox沒有註冊事件處理程序?

  document.addEventListener('DOMContentLoaded',function(e){ 
      console.log('kk'); 
      var box=document.getElementById('box'); 
      var body=document.getElementsByTagName('body')[0]; 

      setTimeout(document.getElementById('msgline').style.opacity=1,1000); 

      body.addEventListener('dragenter',function(e){ 

       console.log('kkkkkkk!'); 
       box.style.transform=box.style.webkitTransform='rotateX(-20deg) rotateY(180deg)'; 
       enters++; 
       e.preventDefault(); 
       return false; 

      }); 

      body.addEventListener('dragover',function(e){e.preventDefault(); return false;}); 

      body.addEventListener('dragleave',function(e){ 

       if(--enters===0) 
        box.style.transform=box.style.webkitTransform='rotateX(-20deg)'; 

      }); 

      body.addEventListener('drop',function(e){ 
       var files=e.dataTransfer.files; 
       [].forEach.call(files,function(file){ 
         convertToMOSTEM(file); 
        } 
       ); 
       e.preventDefault(); 
       return false; 
      }); 
     }); 

至少不會在Firefox。它意味着在body上註冊事件處理程序,以獲得html5拖動。當您拖動身體時,它應該將一些樣式應用於box,並在dragleave上將其刪除。每當文件被丟棄時它也應該調用convertToMOSTEM。它將kk記錄到控制檯,這意味着執行DOMContentLoaded中的代碼。但是,它從不動畫盒或記錄kkkkkkkk!當我拖動或離開時,當我放下它時嘗試打開文件。我很確定事件處理程序從來沒有定義。它適用於Safari和Chrome。問題是什麼?

+0

如果不是使用'getElementsByTagName'選擇'body',而只是使用'document.body',會發生什麼? – 2013-03-15 04:06:00

+0

@ JulianH.Lam剛剛嘗試過,它沒有工作 – Markasoftware 2013-03-15 04:07:16

回答

1

我發現了錯誤。它似乎是隨機的(甚至可能是一個錯誤?),但它是setTimeout調用。評論它,它工作正常!

+1

好聽。我沒看到那條線。看起來你錯誤地使用了'setTimeout'函數。 '',1000'之前的所有內容都應該包含在一個匿名函數中。 – 2013-03-15 04:15:58

+0

不知道。我認爲你只需要做到這一點,如果你有多個陳述 – Markasoftware 2013-03-15 04:18:34

+0

可能,這或許可以解釋爲什麼它可以在某些瀏覽器中運行,但不是其他瀏覽器。 'setTimeout'中的第一個參數要麼是一個字符串到一個已經存在的函數,要麼是一個函數引用(當然還有一個匿名函數)。 – 2013-03-15 04:20:41

相關問題