2011-12-23 54 views
15

我有以下几点。在HTML标记内调用javascript函数

<a href="#" onclick="hello()">click me</a> 

而且我有一个JavaScript文件

$(document).ready(function() { 
    function hello() { 
    alert('hi'); 
    } 
}); 

但是,当我点击“点击我”,警告没有被解雇。它说“你好”没有定义。我删除document.ready,它可以工作。

这是因为“hello”没有被定义,直到整个文档准备好,但是当上面的“anchor”标记被渲染时,它找不到函数?

有什么办法可以让这个工作?

  • 我必须通过丑“的onclick”
  • 我需要保持内部的document.ready我的JS调用从HTML标签javascript函数(有我需要的其他部分)

回答

15

hello()函数声明不在全局作用域中,因此尝试在全局作用域中调用它的HTML调用找不到它。

function hello() { 
    alert('hi'); 
} 

$(document).ready(function() { 
}); 

或通过在全球范围内宣布它:

$(document).ready(function() { 
    window.hello = function() { 
    alert('hi'); 
    } 
}); 
2

原因你好是不确定的,因为你好()只存在你可以通过移动你的hello()功能成为全球范围内解决这个问题在DomReady回调的上下文中。您需要在全局上下文中定义Hello()。

1
  1. 从$(document).ready()回调中移除“hello()”。
  2. 在“click”事件回调中调用“hello()”。
<a href="#" id="say_hello">click me</a> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#say_hello').click(function() { 
     hello(); 
    }); 
}); 

function hello() { 
    alert('hi'); 
} 
</script> 
+0

你不应该在首先使用内联JS地点。上面提到的所有人都是正确的。 – 2011-12-23 05:33:40

+0

-1没有解释,只有代码。 – 2011-12-23 05:36:21

+1

谢谢@HarryJoy。现在我明白了。 – 2011-12-23 05:48:32

16

您还可以使用HREF属性与的javascript:关键字定位代码中调用JavaScript函数:

<a href="javascript:hello()">click me</a> 
+2

这是一个非常有趣且富有创意的解决方案。 – ChaseMoskal 2014-06-15 09:37:26