为什么我的函数在document.ready函数中没有被调用?

时间:2018-01-09 02:48:29

标签: javascript jquery html function scope

我有一个名为myFunction的函数,它是从DOM调用的。 我有jquery也初始化

<script>
  $( document ).ready(function() {
    function myFunction() {
        window.open("survey.html");
    } 
      $( "#begin" ).on("click", function() {
        event.preventDefault();
        console.log( "ready!" );
        Materialize.toast('Be a friend!', 2000);      
      });       
  });      
</script>

继承我的HTML

<section class="jumbotron">
    <div class="container">
        <div class="row">
            <div class="col s8 desc">
               <h1>Welcome to Friend Finder</h1>
               <h3>Take our survey find your match.</h3>
               <a href="" id="begin" class="btn-large waves-effect waves-light red" onclick="setTimeout(myFunction, 3000);">BEGIN SEARCH</a><br>
        </div>
    </div>
  </section>

我的目标:当我点击标签时。 IT将调用函数myFunction和WAIT 3秒setTimeout将浏览器转移到下一页

window.open(survey.html).

3 个答案:

答案 0 :(得分:3)

因为onclick需要访问全局窗口空间中的函数。

但是您在$(document).ready内声明了它,并且只能在该回调中访问,因为&#34;范围&#34; 。只需将其移到ready

之外
  function myFunction() {
     window.open("survey.html");
  } 

  $( document ).ready(function() {
    $( "#begin" ).on("click", function() {
    ....

答案 1 :(得分:2)

function myfunction()...

之外声明$(document).ready(function()...
function myFunction() {
    window.open("survey.html");
} 

$( document ).ready(function() {
    $( "#begin" ).on("click", function() {
        event.preventDefault();
        console.log( "ready!" );
        Materialize.toast('Be a friend!', 2000);      
    });       
});   

您的问题是myFunction的范围是就绪函数。所以你无法在全球范围内访问它。

详细了解范围和闭包here

答案 2 :(得分:0)

你确实意识到你可以使用不同类型的onClick事件,对吧?在许多情况下,这甚至可能是一种更正确的方法,因为$(document).ready()意味着所有这些功能只应在整个文档正确加载后开始工作,这在大多数情况下都是您想要的。因此,从底部开始比从顶部开始更正确。

$('#begin').click(function(){
    myFunction();
});