Cần giúp đỡ jquery không hoạt động

Hiện tại e đang dùng đoạn ajax click để load các phần tử trang khác qua bên trang index của e.
Nhưng khi e thêm 1 đoạn script chèn vào để thêm các phần tử đã load.
Hàm này e dùng thì nó k load được:

$(document).ready(function() {

Nhưng khi e dùng hàm này:

$(document).ajaxComplete(function() {

thì mỗi lần click nó lại load thêm.

Cho nên kết cục e muốn hỏi có hàm nào mà sau khi trang web load xong thì nó hoạt động sciprt đó k ạ?

Click load!
Ý bạn là nó chỉ thực hiện khi có thao tác chứ không tự động?

Theo mình hiểu: Bạn có một nút nhấn để tải ajax, bên trong click() bạn chỉ gọi mà KHÔNG hiển thị dữ liệu nhận được. Thay vào đó bạn lại dùng ready()ajaxComplete() để nhận và hiển thị.

  • ready() chỉ tải duy nhất 1 lần sau khi trang (toàn bộ HTML, CSS và Javascript) tải xong. Khi bạn nhấn vào nút tải ajax, thì có lẽ ready() đã thực hiện xong rồi. Và bạn nên biết ready() và ajax chẳng liên quan gì đến nhau cả.
  • ajaxComplete() xảy ra khi MỌI ajax hoàn thành việc tải. Nên dùng có chọn lọc.

Hướng thực hiện:

  • Nếu bạn muốn tự động thì dùng ready(), bên trong hàm thì thực hiện gọi ajax và hiển thị luôn.
  • Nếu muốn thủ công thì thực hiện gọi và hiển thị ngay trong click().

Nếu là thủ công thì việc nhấn nhiều lần sẽ làm dữ liệu bị lặp lại.
Hoặc là chỉ cho nhấn 1 lần, hoặc là các lần nhấn sau thì tải thêm dữ liệu khác (kế tiếp) nữa.

$.ajax({
url:"page",
data:{},
success: function(data){
    // Thực hiện hiển thị dữ liệu ở đây theo tham biến data của hàm.
}
});

Còn nhiều cách thực hiện nữa, bạn có thể tìm hiểu thêm.
https://api.jquery.com/jquery.ajax/

4 Likes

Bác hiểu sai ý e rồi hiện tại e có 1 đoạn script này:

    $("#navigation-bar li").click(function() {
        $(".active").removeClass("active");
        $(this).addClass("active");
        var a = $(this).attr("data");
        var e = $(this).attr("item-data");
        event.preventDefault();
        0 != a ? ($(".spinner").show(), $(".tdata").load("" + a + " .table", function() {
            var b = "";
            for (i = 1; i < $(".tdata tr").length; i++) {
                b = b + '' + $(this).find('tbody').html() + ''
            }
            $(".activea").removeClass("activea");
            $(".forum" + e).addClass("activea").html(b);
            $(".spinner").hide();
        })) : ($(".activea").removeClass("activea"), $(".forum" + e).addClass("activea"));
    })`
và đoạn này

    $(document).ready(function() { 
            var default_avatar= 'https://illiweb.com/fa/invision/pp-blank-thumb.png';
            var caching_time= 24*60*60*1000;
            var caching_error= 60*1000;
           var set_avatar= function(id) {
                $('.lastpost-avatar.member'+id).html('<img src="'+get_avatar(id)+'" />');
            };
           var get_avatar= function(id) {
                if(localStorage.getItem('t_ava'+id) < +new Date - caching_time || (localStorage.getItem('d_ava'+id)==default_avatar && localStorage.getItem('t_ava'+id) < +new Date - caching_error))
                {
                    localStorage.setItem('d_ava'+id, default_avatar);
                    $.get('/u'+id, function (d){
                        localStorage.setItem('t_ava'+id,+new Date);
                        localStorage.setItem('d_ava'+id, $('#profile-advanced-right .module:first div img:first,.forumline td.row1.gensmall:first > img, .frm-set.profile-view.left dd img,dl.left-box.details:first dd img, .row1 b .gen:first img, .real_avatar img',d).first().attr('src')||default_avatar);
                        set_avatar(id);
                    });
                }
                return localStorage.getItem('d_ava'+id);
            };
           var to_replace= {};
           $('.avaf a[href^="/u"],.tmtavas a[href^="/u"]').each(function(){
                to_replace[$(this).attr('href').substr(2)]= 1;
                $(this).before('<span class="lastpost-avatar member'+$(this).attr('href').substr(2)+'"></span>');
            });
        
           for(i in to_replace)
            {
                set_avatar(i);
            };
        
    });

Nhưng khỗ nỗi e k gộp lại được nên e add đoạn 2 vô
$(document).ajaxComplete(function() {
nó hiện nhưng mỗi lần e click tab thì nó lại thêm vào phần tử đã load ra. Cứ như v e click tab là nó hiện hoài lun.

Thì bạn thêm 1 biến hoặc thuộc tính cho thẻ đã tải (load) để đánh dấu nó đã được tải rồi. Nếu lần gọi sau đã có biến/thuộc tính đó thì không gọi ajax nữa.

3 Likes

Bác giúp e gộp 2 cái script đó lại là 1 được không e nhìn rối quá

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?