2015-02-23 38 views
2

我有這樣的代碼:的jQuery:未捕獲的ReferenceError:功能沒有定義

<script> 
    $(function() { 
     function back_to_top(){ 
      $('body,html').animate({scrollTop: 0}, 100); 
     } 
    }); 
</script> 

<div class="toTop" onClick="back_to_top();">To up!</div> 

當我點擊這個按鈕,鍍鉻告訴我這個錯誤:未捕獲的ReferenceError:back_to_top沒有定義。 我的錯誤在哪裏?

回答

7

這是因爲jQuery的DOM ready函數創建一個新的範圍,封閉的功能,這意味着它不是從全球範圍之外訪問。內聯事件必須位於全局範圍內。

function back_to_top(){ 
    $('body,html').animate({scrollTop: 0}, 100); 
} 
$(function() { 

}); 

或者刪除內聯處理程序並使用不顯眼的JavaScript。

$(function() { 
    function back_to_top(){ 
     $('body,html').animate({scrollTop: 0}, 100); 
    } 

    $('.toTop').click(function(){ 
     back_to_top(); 
    }); 
}); 

HTML沒有內嵌處理器:

<div class="toTop">To up!</div> 
2

你必須把back_to_top jQuery的文檔準備功能

1

JavaScript有功能範圍。這意味着函數中定義的變量(包括函數聲明)只能在該函數中使用。 即在這種情況下back_to_top僅在內可訪問。

...onClick="back_to_top();"正在全球範圍內尋找並且back_to_top不可用。你可以暴露它,但如果你這樣做:

$(function() { 
     window.back_to_top = function { 
      $('body,html').animate({scrollTop: 0}, 100); 
     } 
    }); 

我不認爲這是理想的,但它會適用於你的情況。更好的方法是附加一個監聽器。看看jQuery click的方法。

希望它有幫助。

相關問題