html替换后jquery不适用

发布于 2024-12-17 04:52:43 字数 663 浏览 0 评论 0原文

我有一些从 $(document).eady() 函数调用的 jquery 函数,如下所示:

<script type="text/javascript">

$(document).ready(function(){
    $('.table_task_type tr').mouseover(function(){
        $(this).addClass("hover");
    });
    $('.table_task_type tr').mouseleave(function(){
        $(this).removeClass("hover");
    });
    $('input:checkbox').click(function() {
        $(this).parent().parent().toggleClass('checked');
    });
});
</script>

问题是我在某些用户操作上替换了部分 html。我这样做是这样的:

$("#my_table").empty();
$("#my_table").html(data);

第一次加载页面时会触发 jquery 事件,但是一旦我的表的 html 被替换,它就不再起作用了。

有什么解决方法吗?

I have some jquery functions that I call from the $(document).eady() function like the following :

<script type="text/javascript">

$(document).ready(function(){
    $('.table_task_type tr').mouseover(function(){
        $(this).addClass("hover");
    });
    $('.table_task_type tr').mouseleave(function(){
        $(this).removeClass("hover");
    });
    $('input:checkbox').click(function() {
        $(this).parent().parent().toggleClass('checked');
    });
});
</script>

The thing is that I replace part of the html on some user action. I do it like :

$("#my_table").empty();
$("#my_table").html(data);

The jquery events are fired the first time the page is loaded, but as soon as the html of my table is replaced it doesn't work anymore.

Any workaround to that ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只有一腔孤勇 2024-12-24 04:52:43

使用jquery live 方法
例子:

$('.table_task_type tr').live('mouseover',function(){
    $(this).addClass("hover");
});

use jquery live method
example:

$('.table_task_type tr').live('mouseover',function(){
    $(this).addClass("hover");
});
浅唱々樱花落 2024-12-24 04:52:43

您应该按照前面的海报所建议的那样使用 .on() 方法。您想要做的是将绑定放在正在刷新的容器的父元素上。

<div id="content">
    <div id="my_table">
        <table>
            <tr class="table_task_type">
                <td>foo</td>
                <td>bar</td>
                <td>baz</td>
            </tr>
        </table>
    </div>
</div>


$(function() {
    $('#content').on('hover', '.table_task_type', 
        function() {
            $(this).toggleClass('.rollover');
        }, 
        function() {
            $(this).toggleClass('.rollover');
        });
});

该侦听器绑定到您要重新填充的侦听器的父容器。由于父容器 (#content) 不会重新填充,因此绑定不会中断。它还更快,因为单击事件只需冒泡到 DOM 中的一个节点,而不是一直冒泡到文档。

You should use the .on() method as the previous posters have suggested. What you want to do is put the binding on a parent element of the container that is being refreshed.

<div id="content">
    <div id="my_table">
        <table>
            <tr class="table_task_type">
                <td>foo</td>
                <td>bar</td>
                <td>baz</td>
            </tr>
        </table>
    </div>
</div>


$(function() {
    $('#content').on('hover', '.table_task_type', 
        function() {
            $(this).toggleClass('.rollover');
        }, 
        function() {
            $(this).toggleClass('.rollover');
        });
});

The listener is bound to the parent container of the one you are re-populating. Since the parent container (#content) is not re-populated, the binding won't break. It's also faster because the click event only has to bubble up one node in the DOM as opposed to bubbling all the way up to document.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文