在HTML标记内调用javascript函数

时间:2011-12-23 05:29:41

标签: javascript html

我有以下内容。

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

我有一个Javascript文件

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

但是当我点击“点击我”时,警报没有被触发。它说“你好”没有定义。我删除document.ready,它的工作原理。

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

有什么方法可以让它发挥作用吗?

  • 我必须通过丑陋的“onclick”
  • 从html标签调用javascript函数
  • 我需要将我的JS保留在document.ready(我还需要其他部分)

4 个答案:

答案 0 :(得分:17)

您的hello()函数声明不在全局范围内,因此来自尝试在全局范围内调用它的HTML的调用无法找到它。您可以通过将hello()函数移动到全局范围来修复它:

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

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

或在全球范围内宣布:

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

答案 1 :(得分:17)

您还可以在Anchor Tag中使用 HREF 属性与 javascript:关键字来调用JavaScript函数:

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

答案 2 :(得分:2)

  1. 从$(document).ready()回调中删除“hello()”。
  2. 在“点击”事件回调中调用“hello()”。
  3. <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>
    

答案 3 :(得分:1)

hello未定义的原因是因为Hello()仅存在于DomReady回调的上下文中。您需要在全局上下文中定义Hello()。