
我用online的可以,但是開自己的html的時候沒有alert?請問是為什麼?
程式碼盡量少用截圖,通常看到截圖願意回應的會比較少。
可以用 it 邦幫忙內建貼程式碼的方式,如圖 
或是把你 codepen 的網址直接貼出來
上一篇有人留言過「改用相對路徑試試看」,我也猜是這個問題
可以按 F12 開啟開發工具,看看你的 js 跟 css 有沒有讀取到
幫你改好
index.html
<!DOCTYPE html>
<html lang="zh-Hant-TW">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
    <link rel="stylesheet" href="nav.css">
</head>
<body>
    <nav>
        <ul>
            <li class="btn" id="home"><a>Home</a></li>
            <li class="btn" id="2"><a>Page 1</a></li>
            <li class="btn" id="3"><a>Page 2</a></li>
        </ul>
    </nav>
    <!-- script 如果不是利用監聽事件,等全部載入再執行的話
        要放在「用到的頁面元素」的後面 -->
    <script src="nav.js"></script>
</body>
</html>
nav.css
.btn{
    background-color : rgb(27, 27, 27);
    width:90px;
    height: 35px;
    color:rgb(255, 255, 255);
    line-height: 200%;
    text-align:center;
    display:inline;
    float:left;
    list-style-type: none;
}
.btn:hover{
    background-color : rgb(71, 71, 71);
}
nav.js
var home = document.getElementsByClassName('btn')[0];
home.setAttribute("onclick","test()");
function test(){
    window.alert('hello');
};
如果 nav.js 改成這種寫法<script src="nav.js"></script> 就可以放在 head 區塊
function test() {
    window.alert('hello');
};
//監聽 DOMContentLoaded 事件,當 DOM 內容讀取完畢才執行
document.addEventListener('DOMContentLoaded', function () {
    var home = document.getElementsByClassName('btn')[0];
    
    //下面這行跟 home.setAttribute("onclick", "test()"); 會得到相同結果
    home.addEventListener('click', test);
});
jquery 版本<script src="nav.js"></script> 也可以放在 head 區塊
function test() {
    window.alert('hello');
};
$(function() {
    $('.btn').first().on('click', test);
});
可以了,謝謝你,我以後會注意的!