2013-07-29 54 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