javascript - 单击渲染的 ul li 时,双倍 ajax json 和循环警报 var 多次

标签 javascript jquery json ajax each

我有两个ajax json。一个用于聊天用户列表列,另一个用于每个用户的消息历史记录。 当单击 $('.member_list ul li') 元素时...第二个 ajax 将 li 的值作为 json 发送到数据库,成功后,相应的消息将被加载并附加到 $('.messaging-history ul ')。

但是当我之前单击过 $('.member_list ul li') 元素时...单击 $("#messagetest") 时会多次获得 valSessionID,具体取决于 $('.member_list ul 的频率) li') 元素被点击。

如何防止这种情况发生,以便 valSessionID 在单击 $("#messagetest") 时仅发出一次警报?这是我的设置:

var valSessionID;   

$.ajax({
    url: "/chat_userlist.php",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataType: "json",           
    success: function (data) {
        $.each(data, function (i, item) {
            $('.member_list ul').append('<li value="'+data[i].id+'"><div><span><span class="messaging-data-username">'+data[i].username+'</span></span></div></li>');                   
            //var valSessionID;
        }); 
        //var valSessionID; 

        ...     

        $(".member_list ul li").click(function() {
            valSessionID = $(this).attr('value');               
            $.ajax({
                url: "/chat_messaging.php",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: mergedJSONChat,           
                success: function (data) {                          
                    $.each(data, function (i, item) {
                        $('.messaging-history ul').append('<li><div class="message my-message">'+data[i].message+'</div></li>');    
                    });         
                }                   
            });                 
            $("#messagetest").click(function() {                    
                alert(valSessionID);                
            });                                                                                                 
        });

    }                       
}); 

最佳答案

首先将事件放在 ajax 调用之外,如下所示:

var valSessionID;   

$.ajax({
    url: "/chat_userlist.php",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataType: "json",           
    success: function (data) {
        $.each(data, function (i, item) {
            $('.member_list ul').append('<li value="'+data[i].id+'"><div><span><span class="messaging-data-email">'+data[i].username+'</span></span></div></li>');                  
            //var valSessionID;
        }); 
    }                       
}); 

$(".member_list ul li").click(function() {
    valSessionID = $(this).attr('value');               
    $.ajax({
        url: "/chat_messaging.php",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: mergedJSONChat,           
        success: function (data) {                          
            $.each(data, function (i, item) {
                $('.messaging-history ul').append('<li><div class="message my-message">'+data[i].message+'</div></li>');    
            });         
        }                   
    });                 

});

$("#messagetest").click(function() {                    
    alert(valSessionID);                
});

编辑:

您必须使用

$(document).on('click', '#element', function() {
    //code here
});

对于动态加载的元素,因为

$('#element').on('click'

只会绑定(bind)一次,因此如果您的元素不存在,则该元素将无法工作,$(document) 将在每次触发事件时检查所有匹配的元素。

var valSessionID;   

$.ajax({
    url: "/chat_userlist.php",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataType: "json",           
    success: function (data) {
        $.each(data, function (i, item) {
            $('.member_list ul').append('<li value="'+data[i].id+'"><div><span><span class="messaging-data-email">'+data[i].username+'</span></span></div></li>');                  
            //var valSessionID;
        }); 
    }                       
}); 

$(document).on('click', '.member_list ul li', function() {
    valSessionID = $(this).attr('value');               
    $.ajax({
        url: "/chat_messaging.php",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: mergedJSONChat,           
        success: function (data) {                          
            $.each(data, function (i, item) {
                $('.messaging-history ul').append('<li><div class="message my-message">'+data[i].message+'</div></li>');    
            });         
        }                   
    });                 

});

$(document).on('click', '#messagetest', function() {                    
    alert(valSessionID);                
});

关于javascript - 单击渲染的 ul li 时,双倍 ajax json 和循环警报 var 多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870399/

相关文章:

javascript - Angular 生成一个空的 <option>

jQuery: height()/width() 和 "display:none"

php - 通过PHP解析不完整字符串的json

ios - uitableview中scrollviewdidscroll方法的调用?

json - 根据 key 解码 JSON

javascript - jQuery 将 OPTIONS 而不是 POST 请求发送到本地主机上的 REST

javascript - 通过 CSS 或 JavaScript/JQuery 设置元素高度

javascript - ajax封装请求需要等待累计结果

javascript:在回调函数中获取变量的值

javascript - geoXML3,如何加载文件夹中的所有KML文件?