1

我完全迷失在这里,我不知道为什么会这样。

我在 .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' );
    });
});

现在,消息 div 已创建,并在页面首次加载时完美地向下滑动。当我按下#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>

4

1 回答 1

2

看起来消息是动态加载的,并且m_close可能会使用方法添加到message元素中showMessage()

所以试试

$( 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注册单击事件处理程序时,它将处理程序仅注册到当时存在于 dom 中的那些元素。当您showMessage再次调用时,现有m_close的将被删除并创建一个新的,因此click处理程序不再附加到新元素。这里的解决方案是使用如上所示的事件委托

于 2013-07-29T03:48:16.707 回答