2013-03-15 54 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

相关问题