功能超出范围?

时间:2015-07-07 18:43:27

标签: javascript dom javascript-events

我有一个定义如下的函数:

window.onload = function() {
      var ids = document.getElementById("idname");
      function myFunction(){

            /...*use ids var in here*./
      }
}

我试图通过html

中的按钮onclick调用myFunction
<button onclick="myFunction();"></button>

但是它说没有定义myFunction。我明白因为这是在window.onload里面。我怎样才能解决这个问题?我需要window.onload,因为我需要使用document.getElementById(“testID”)来获取内容

2 个答案:

答案 0 :(得分:4)

  

我需要window.onload,因为我需要使用document.getElementById(&#34; testID&#34;)来获取内容

不,你不需要window.onload。您只需将代码放在之后文档中标识为testID的元素。

示例:

<div id="testID"></div>
<script>
    var ids = document.getElementById("testID");
    function myFunction(){
        /...*use ids var in here*./
    }
</script>

但是,如果你想继续使用window.onload,那么我建议使用内联事件处理程序,但使用JS绑定处理程序:

window.onload = function() {
    var ids = document.getElementById("testID");
    ids.onclick = function(event){
      /...*use ids var in here*./
    }
};

(无论如何,这可能是件好事。)

最后,您可以使用thisevent.target获取对事件处理程序内元素的引用:

<div id="testID"></div>
<script>
    document.getElementById("testID").onclick = function(event) {
      // access element via `this` or `event.target`
    };
</script>

Learn more about event handling

答案 1 :(得分:1)

您在function内定义了它,因此它已锁定到该范围。也许你想在它之外定义它:

function myFunction() {
  var ids = document.getElementById("idname");
  // ...
}

window.onload = function() {
  // ...
}

请注意,这是老式JavaScript。你可以使用像jQuery这样的东西来清理它,看起来像这样:

$(function() {
  // Any initialization after page load.
});

function myFunction() {
  var ids = $('#idname');

  // ...
}