2

这可能是非常明显的事情,但我是 jquery 的新手,所以不知道问题是什么。

我正在使用 php/jquery/html 等制作一个简单的论坛(看看是否可以)。当它第一次打开时,它会显示论坛列表(工作正常)和其他内容的空框(div)。当您单击列表中的论坛时,它会调用 showForum(id) 并发出警报(只是为了让我知道它正在工作)并将论坛中的线程列表加载到一个空的 div 中(工作正常)。问题是当我尝试加载线程(通过单击它)时,没有任何反应,甚至没有警报。

jQuery代码:

$(document).ready(function() {
    $('.flink').click(function() {
        var id = $(this).attr('id');
        showForum(id);
        alert("Forum opened");
    });                    

    $('.tlink').click(function() {
        var id = $(this).attr('id');
        showThread(id);
        alert("Thread opened");
    }); 
});

function showForum(id) {
    $('.topic-container').load("showforum.php", {
    'f': +id
    });
    showLinks(id, 1);
}

function showThread(id) {
    $('.entry-container').load("showthread.php", {
    'thread': +id
    });
    showLinks(id, 2);
    alert(id);
}

HTML 代码:

<html>
    <head>
        <title>
            Title
        </title>
    </head>
    <body>

        <table class="out-table">
            <tr>
                <td rowspan="6" class="side-menu">
                    <table class="side-header">
                        <?php  // Code to get stuff from DB, flinks are created in here. tlinks are created with more php in showforum.php ?>
                    </table>
                </td>
            </tr>
            <tr>
                <td>
                    <div class="topic-container">
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div class="top-links">
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div class="entry-container">
                    </div>
                </td>
            </tr>
        </table>
    </body>
</html>

我检查了类名以确保它们是正确的。我点击了一个论坛公开电话 showThread(只是为了确保该功能正常工作)并且工作正常。

任何人都可以提供的帮助将不胜感激。

4

2 回答 2

2

您需要为使用加载添加的内容进行事件委托on。您的点击事件仅适用于 DOM 中存在的元素。因此,您需要将事件附加到父元素(已存在)或文档元素,因此稍后添加的元素将具有“委托”可用的事件。

见 .on()

示例演示

在您的情况下,我猜想.tlink稍后会在loadDOM 中添加。但是您将事件附加到.tlink它甚至存在之前,因此这些绑定实际上是无效的。

$(document).on('click','.flink', function() {
        var id = $(this).attr('id');
        showForum(id);
        alert("Forum opened");
    });                    

    $(document).on('click','.tlink', function() {
        var id = $(this).attr('id');
        showThread(id);
        alert("Thread opened");
    }); 

委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。例如,该元素可以是模型-视图-控制器设计中视图的容器元素,或者如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。

于 2013-05-10T19:41:46.643 回答
0

由于您的内容是动态加载的,因此您需要使用 .on 处理程序进行点击:http: //api.jquery.com/on/

对于您的代码,请尝试以下操作:

$(document).on("click", ".flink", fLink);
function fLink(e) {
var id = $(this).attr('id');
        showForum(id);
        alert("Forum opened");
}

$(document).on("click", ".llink", lLink);
function lLink(e) {
var id = $(this).attr('id');
        showThread(id);
        alert("Thread opened");
}
于 2013-05-10T19:42:27.603 回答