我和外部JS文件
$(document).ready(function() {
var example = function(){ alert("hello") }
});
我想从我的html中调用该函数,我该怎么做?
<img src="..." ondblclick="example()" />
n.b。我知道jquery dblclick(),但对如何正确执行上述操作感到好奇。
答案 0 :(得分:15)
$(document).ready(function() {
window.example = function() {
alert("hello")
}
});
如果可能的话,或者在外面定义它。它看起来似乎不必在文档内部进行定义。
答案 1 :(得分:3)
最好的选择是简单地在document.ready()
之外定义函数。没有理由在$(document).ready()
事件中定义函数是必要的,就像在$(document).ready()
函数中调用函数一样,文档是保证准备好的。
但是,您也可以在全局窗口对象上定义该函数,如下所示:
$(document).ready(function() {
window.example = function(){ alert("hello") }
});
答案 2 :(得分:3)
此处的其他解决方案将起作用,但在结构上,您的项目中,最佳解决方案是从HTML中删除事件处理代码并完全通过javascript(单独的HTML / JS)连接事件。由于您的项目中已经有jQuery,因此非常简单。要做到这一点,你需要做的就是在图像上加上某种识别:
<img id="example" src="..." />
然后,你可以在你的ready()函数中连接事件代码,就像这样
$(document).ready(function() {
$("#example").dblclick(function() {
alert("Hello");
});
});
这具有以下优点:
ondblclick
更具可扩展性 - 允许多个不同的代码部分在同一对象上使用非冲突的事件处理程序答案 3 :(得分:3)
如果要从HTML访问它,您的函数应该是全局的(实际上是window对象的属性)。但最佳做法是避免全局变量和函数,而不是使用命名空间:
// let's publish our namespace to window object
if (!window.myNamespace){
// creating an empty global object
var myNamespace = {};
}
// and add our function to it
$(document).ready(function() {
myNamespace.example = function(){ alert("hello"); }
});
我们可以在HTML中使用它:
<img src="..." ondblclick="myNamespace.example()" />
答案 4 :(得分:1)
@Esailija已正确回答,但如果您想保留它,则只需删除var
并将其设为全局。
var example;
$(document).ready(function() {
example = function() {
alert("hello")
}
});
如果你没有把var
变量/ function / object变成全局变量。使用var
您正在document.ready
函数中设置其上下文。
答案 5 :(得分:1)
您可以将函数声明移到DOM-ready处理程序之外:
function example(){ alert("hello") }
$(document).ready(function() {
// code
});
但更好的解决方案是将JavaScript保留在.js文件中并避免使用内联事件处理程序。给你的元素一个id并获取它:
<img src="..." id="imgid" />
$(document).ready(function() {
document.getElementById("imgid").ondblclick = function(){ alert("hello") }
});