2012-11-01 60 views
3

我對jQuery有點麻煩,我真的不知道我在做什麼錯。jQuery的問題點擊

我有一個靜態內容和幾個按鈕的簡單頁面。當我想將一個點擊事件附加到我的一個按鈕時,我的問題就來了 - 它不會工作!

這裏是我在我的html代碼:

<head> 
    <link rel="stylesheet" href="css/main.css" type="text/css"> 
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css"> 
    <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> 
    <script type="text/javascript" src="js/my.js"></script> 
</head> 

<body> 
    .... 
    <button class="btn btn-success" id="my-button">BUTTON</button> 
</body> 

,這裏是在my.js代碼我有:

$('#my-button').click(function() 
{ 
    console.log("Button Clicked"); 
}); 

無論多少次,我按一下按鈕,無論我使用哪個瀏覽器的消息都不會輸入到控制檯。我只是不明白,我之前沒有這樣的問題......我希望這不是一個明顯的錯誤。

我還應該指出,當我將它改爲$(document).ready時,它工作正常!

幫助:(

+1

http://api.jquery.com/ready/ – Blazemonger

回答

3

嘗試包裹這裏面像下面document ready功能,

$(function() { 
    //content below will be executed only after DOM is ready 
    $('#my-button').click(function() { 
    console.log("Button Clicked"); 
    }); 
}); 
+1

哇......我真是個傻瓜。我要去羞辱我的頭,然後回來再試。但無論如何,這解決了它,謝謝一大堆:D –

0

你的JS之前你的HTML,這意味着$('#my-button')選擇出現空的。你可以試試事件委託,以保證無論什麼時候符合你的標準的元素出現,它都有一個點擊監聽器:

$(document).on("click",'#my-button',function() 
{ 
    console.log("Button Clicked"); 
}); 
4

你說的是y我們的自我,將其包裝在一個文檔就緒的回調中將解決問題。

原因是您的JavaScript是在元素實際位於DOM之前運行的,所以在運行JavaScript時,沒有元素與您的選擇器匹配,因此不能附加clickevent偵聽器。

如果您由於某種原因不想使用DOM準備好的回調,另一個解決方案就是在關閉body元素之前將最後一件事包括在JavaScript中。當瀏覽器到達這一點時,你的元素應該在DOM中,所以你的代碼應該沒問題。

解決方案1:等待DOM做好準備

$(function() { 
    $('#my-button').click(function() { 
    console.log("Button Clicked"); 
    }); 
}); 

解決方案2:加載JavaScript的最後

<head> 
    <link rel="stylesheet" href="css/main.css" type="text/css"> 
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css"> 
    <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> 
</head> 

<body> 
    .... 
    <button class="btn btn-success" id="my-button">BUTTON</button> 
    <script type="text/javascript" src="js/my.js"></script> 
</body> 
+0

我加1爲第一部分,但我完全不同意負載js最後。他是如何加載的就好了 – SpYk3HH

+0

@ SpYk3HH我並不是說在頭部加載腳本是錯誤的,但在這種情況下,他需要使用DOM準備好的回調。我在說還有另一種方法,那就是加載JavaScript las。 –

+0

呃,我明白了,我只是認爲它不好,並不是一個好的建議,我個人認爲我猜想 – SpYk3HH

1

這是不是一個錯誤。問題是當你的腳本運行時,你的按鈕不在頁面上呈現。將腳本封裝在$(document).ready()中時,它將確保只有在整個內容正確呈現後腳本才能運行。