Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript在两次HTML注入后停止工作_Javascript_Jquery_Ajax_Django - Fatal编程技术网

Javascript在两次HTML注入后停止工作

Javascript在两次HTML注入后停止工作,javascript,jquery,ajax,django,Javascript,Jquery,Ajax,Django,我正在为我的网站创建聊天功能。它的左边是对话,右边是用户列表。当用户的div被点击时,他们的ID被发送到Django后端,返回完整的HTML,我调用$('HTML').HTML('''),然后调用$('HTML').HTML(data'),其中数据是Django呈现的完整的返回HTML 当我单击一个用户时,整个页面都会刷新,我能够按预期执行所有与JS相关的操作。当我再次重新加载页面时,HTML会重新加载返回的HTML,但JS功能会完全停止。当我检查开发工具中的元素时,JS文件都在那里,并加载到s

我正在为我的网站创建聊天功能。它的左边是对话,右边是用户列表。当用户的div被点击时,他们的ID被发送到Django后端,返回完整的HTML,我调用
$('HTML').HTML(''')
,然后调用
$('HTML').HTML(data')
,其中
数据
是Django呈现的完整的返回HTML

当我单击一个用户时,整个页面都会刷新,我能够按预期执行所有与JS相关的操作。当我再次重新加载页面时,HTML会重新加载返回的HTML,但JS功能会完全停止。当我检查开发工具中的元素时,JS文件都在那里,并加载到sources选项卡中

JavaScript看起来是这样的:

$(document).ready(function(){

    console.log("******LOAD*********")
    var d = $('div.profile-detail');
    d.scrollTop(d.prop("scrollHeight"));

    $('div.message-text').click(function(e){
        var id = $(this).attr('id');

        $.ajax({
        url: '#',
        method: 'GET',
        data: {'id': id,
                'task': 'get_messages'},
        dataType: 'html',
        success: function(data){
            $('html').html('');
            $('html').html(data);
            $('div.section-img').attr('id', id)
        },
        error: function(){
            console.log("Oh no!");
        }
        })

    })


    $('#message-text').keypress(function(e){
        if(e.which == 13 && !e.shiftKey){
            e.preventDefault();
            $.ajax({
                url: '#',
                method: 'GET',
                data: {'message': $('#message-text').val(),
                        'task': 'post-message',
                        'id': $('div.section-img').attr('id')
                },
                success: function(){
                    $('div.profile-section4').before(
                        '<div class="profile-section2">' +
                        '<p><span class="date-span">'+ new Date().toLocaleString() +'</span><br/><br/>' +
                            $('#message-text').val() +
                        '</p>'
                    ),
                    $('#message-text').val('')
                    d.scrollTop(d.prop("scrollHeight"));
                },
                error: function(){
                    console.log("failure");
                }
            })
        }

    });

})

是初始页面加载和第一个AJAX请求之间HTML的差异检查。然后,在事情停止工作之前,在第一个AJAX请求和最后一个AJAX请求之间进行差异检查。您将注意到第一个请求和第二个请求之间没有任何变化,但由于某种原因,事情停止了工作。为什么?

您使用的是旧式jQuery事件挂钩,它在页面准备时进行评估,并引用特定的DOM元素。但是这些DOM元素会被重新加载替换,因此事件不再绑定到任何东西

相反,您应该使用新型委托事件:

$('html').on('click', 'div.message-text', function(e) ...

您使用的是旧式jQuery事件挂钩,它在页面就绪时进行计算,并引用特定的DOM元素。但是这些DOM元素会被重新加载替换,因此事件不再绑定到任何东西

相反,您应该使用新型委托事件:

$('html').on('click', 'div.message-text', function(e) ...

你的问题是否与锚有关?在AJAX请求中,其中
url:#“
?我不这么认为。我将URL更改为
/messages/
,问题仍然以相同的方式存在。查看返回的ajax块(messages.html)的来源可能会有所帮助。您的问题是否与锚相关?在AJAX请求中,其中
url:#“
?我不这么认为。我将URL更改为
/messages/
,但问题仍然以相同的方式存在。查看返回的ajax块(messages.html)的源代码可能会有所帮助。很酷,我永远不会找到这个。丹尼尔,我还想感谢你对我提出的所有问题的帮助。我真的很感激。酷,我永远也找不到这个。丹尼尔,我还想感谢你对我提出的所有问题的帮助。我真的很感激。