动态jquery监听器

时间:2011-06-19 15:50:02

标签: jquery ajax listener

如何使用jquery创建动态侦听器来运行不同的ajax任务?

例如,stackoverflow每个评论都有一个删除链接,其中没有onlick,所以我猜他们创建了一个类监听器,但是它如何知道在哪个id中使用ajax url?

3 个答案:

答案 0 :(得分:1)

您的HTML可能包含以下内容:

<span class="delete-link" data-id="15">Delete comment 15</span>

然后,使用jQuery,您可以在该类上添加回调:

$('.delete-link').click(function() {
    var comment_id = $(this).data('id');
    /* send ajax request for that comment ID */
});

答案 1 :(得分:1)

我相信这是由评论的id祖先的tr属性完成的。

HTML看起来像这样:

<tr id="comment-7507745" class="comment">
    <td class="comment-actions">
        <table>
        <tbody>
        <tr>
            <td class="comment-score">
                <span>&nbsp;</span>
            </td>
            <td>
                <a class="comment-up comment-up-off" title="this is a great comment">upvote</a>
            </td>
        </tr>
            <!-- and a whole bunch more -->
    </td>
</tr>

因此代码可能会使用类似的代码实现:

$(document).delegate('a.comment-up', 'click', function(event) {
    var commentId = $(this).closest('tr.comment').attr('id').substr(8);

    // do something with the comment id
});

因此数据存储为属性,DOM遍历用于查找存储数据的相关元素。

答案 2 :(得分:0)

使用绑定方法

$('a', '#container').bind('click',function(e){
    /* stuff */
});

(解除绑定,删除)

或者,如果您异步添加新链接,则可以使用实时功能

$('a', '#container').live('click',function(e){
    /* stuff */
});

(与生活相反,死亡(事件))

单击链接,#container的子节点将在bind / live的参数内调用匿名函数,然后可以通过检查其索引,类或任何内容来检查单击了哪个链接 - 并运行不同的代码。