【发布时间】:2015-10-19 02:57:02
【问题描述】:
我有一个简单的 index.html 文件,其中包含一些可拖动的图像。我的 JS 文件如下所示:
function drop(ev){
ev.preventDefault();
var data = ev.dataTransfer.getData('text');
ev.target.appendChild(document.getElementById(data));
}
function drag(ev){
ev.dataTransfer.setData('text',ev.target.id);
}
效果很好。但是,据我所知,在自执行块中编写代码是一种很好的做法。
所以,我移动了我的两个函数:
(function(){
function drop(ev){
ev.preventDefault();
var data = ev.dataTransfer.getData('text');
ev.target.appendChild(document.getElementById(data));
}
function drag(ev){
ev.dataTransfer.setData('text',ev.target.id);
}
})();
现在,当拖动图像时,函数似乎“未定义”。他们可能是新手问题,但是:
我可以将我的函数保留在块范围内,并且仍然像
<div id="div0" ondrop="drop(event)">...</div>这样在 HTML 上使用它们吗?如果不是,为什么?
【问题讨论】:
-
试着看看闭包。反正内部函数只会被解析,但除非你调用它,否则它不会被执行
-
这是一个范围问题。如果您希望这些功能是全局的,
window.drop=function(ev){ ...等 -
我不是从 HTML 标签中调用它吗?
<div id="div0" ondrop="drop(event)">...</div> -
是的,所以它需要是全局的
标签: javascript html function scope