【问题标题】:Refreshing JQuery selectors when dynamic elements are being added添加动态元素时刷新 JQuery 选择器
【发布时间】:2013-06-18 22:57:08
【问题描述】:

在接下来的代码中,我使用 AJAX 调用 php 脚本,然后使用 JSON 响应更新 #inner_div。与此同时,#gimme_moar 按钮被注入到#inner_div 中,所以我添加了点击处理程序来询问更多结果。

因此,我们将再次使用 ajax 调用相同的 PHP 脚本,然后我们会将 JSON 响应附加到 #tabla,它是 #inner_div 的一部分。

一切都按预期工作,但有一件事...$(".faulty_selector")正在处理前 50 个“行”...如果我继续添加“行”,它们将不会与 $(".faulty_selector") 绑定,如果我添加这个处理程序将再次复制自己,最后执行$(".faulty_selector") 的次数与我们单击#gimme_moar 按钮的次数一样多。

$.ajax({
type: "POST",
url: URL,
data: {
    data1: '1',
    data2: 2,
    data3: 3
},
dataType: "json",
timeout: 25000,
success: function (data) {
    var counter = 50;
    $('#inner_div').html(data.answer);
    $(".faulty_selector").on('click', function () {
        myfunction_action(this.id);
    });
    $("#gimme_moar").click(function () {
        $.ajax({
            type: "POST",
            url: "URL",
            data: {
                data1: '1',
                data2: 2,
                data3: 3
            },
            dataType: "json",
            timeout: 25000,
            success: function (data) {
                counter = counter + 50;
                $('#tabla').append(data.datos);
            }
        });
    }
    });

根据很多人的说法,live() 或 on() 应该能够毫无问题地处理这种情况......但此时我正在使用 on('clic', etc etc) 并且它是不工作...

有没有办法刷新/重新绑定50个新的$(".faulty_selector")

【问题讨论】:

    标签: javascript jquery html jquery-selectors refresh


    【解决方案1】:

    委派活动

    改变

    $(".faulty_selector").on('click', function() { myfunction_action(this.id); });
    

    $(document).on('click', ".faulty_selector",  function() { myfunction_action(this.id); });
    

    并将点击事件移到ajax 方法的外部。否则,您将为发送的事件 ajax 请求绑定相同的事件。

    似乎也缺少ajax 的右大括号。

    $.ajax({
        type: "POST",
        url: URL,
        data: {
            data1: '1',
            data2: 2,
            data3: 3
        },
        dataType: "json",
        timeout: 25000,
        success: function (data) {
            var counter = 50;
            $('#inner_div').html(data.answer);
        }
    });
    
    $(document).on('click', ".faulty_selector", function () {
        myfunction_action(this.id);
    });
    $(document).on('click', "#gimme_moar", function () {
        $.ajax({
            type: "POST",
            url: "URL",
            data: {
                data1: '1',
                data2: 2,
                data3: 3
            },
            dataType: "json",
            timeout: 25000,
            success: function (data) {
                counter = counter + 50;
                $('#tabla').append(data.datos);
            }
        });
    });
    

    【讨论】:

    • 这就像一个魅力,虽然我觉得它像一个“昂贵”的解决方案。当我“刷新”或调用第一个脚本时,我的脚本仍然不止一次被调用,所以我会尝试进一步缩小我的范围。非常感谢@Sushanth
    • 这比为每个行项分配一个点击事件要干净得多。在这里你只绑定一次事件。如果您觉得它是一个昂贵的解决方案,请尝试将事件绑定到 the closest static ancestor of the elements instead of the document
    • @SolracRagnarockradio.. 很高兴能帮上忙 :)
    • 哦,括号...对不起,我重写了代码,原始代码有点复杂。最后,我将 he 事件与最近的静态祖先联系在一起,该祖先在每次新调用时都会被破坏和重建......现在就像一个魅力一样工作:D 非常感谢你帮助我通过这个大脑放屁 xD 跨度>
    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多