2013-07-29 250 views
1

我完全迷失在這裏,我不知道爲什麼會發生這種情況。使用不同的點擊事件後jQuery點擊事件不會觸發

我有一個.js文件下面的代碼:

$(document).ready(function() { 
    showMessage(); 
    $('#message').slideDown('fast'); 

    //Hide Message// 
    $('#m_close').click(function(event) { 
     $('#message').slideUp('fast'); 
    }); 
    //---// 
    $('#m_button').click(function(event) { 
    showMessage(); 
    $('#message').slideDown('fast'); 
    }); 
}); 

現在,在創建消息股利和向下滑動時,第一次加載頁面完全正常的。當我按#m_close時,div完美地向上滑動。但是,如果我按下#m_button,則消息會滑下所有正確的信息,但按#m_close則完全不起作用。我在開發控制檯中沒有任何錯誤,沒有任何問題出現,只是拒絕工作。我向#m_close添加了一個slideDown,這樣它會關閉然後重新打開,並且它會這樣做,並且#m_close將無限工作,直到按下#m_button。

這是怎麼回事?

編輯:每個請求我的HTML:

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title></title> 
    <link href="includes/style.1.css" rel="stylesheet" type="text/css" /> 
    <script src="includes/jquery.js"></script> 
</head> 
<body> 
    <div id="message"> 

    </div> 
    <button id="m_button">Message</button> 
    <script src="includes/functions.js"></script> 
</body> 

+0

可以添加您的HTML和showMessage()?或一個jsfiddle? –

+0

我加入了我原來的帖子。 – sharf

+0

是'm_close'動態添加到頁面 –

回答

2

看起來像該消息被動態加載和m_close可能被添加到使用showMessage()方法message元件。

所以儘量

$(document).ready(function() { 
    showMessage(); 
    $('#message').slideDown('fast'); 

    //Hide Message// 
    $('#message').on('click', '#m_close', function(event) { 
     $('#message').slideUp('fast'); 
    }); 
    //---// 
    $('#m_button').click(function(event) { 
     showMessage(); 
     $('#message').slideDown('fast'); 
    }); 
}); 

當您使用click註冊一個Click事件處理程序,它註冊的處理程序只存在於那一刻的DOM的那些元素。當您再次致電showMessage時,現有的m_close將被移除,並且會創建一個新的,以便click處理程序不再附加到新元素。這裏的解決方案是使用上面顯示的事件代理

+0

是的,工作,但爲什麼?動態生成與它有什麼關係?它在文檔準備就緒(動態)生成一次,那麼爲什麼它在點擊事件中生成時不起作用? – sharf