insertAfter()在我不想要的时候复制一个元素

时间:2013-07-21 18:45:42

标签: javascript dom

好的,所以我正在制作聊天机器人,我遇到了一个问题。因此,每次按下回车键时,我都需要创建一个创建聊天消息的功能。到目前为止,它出来很好,只有一个问题。它复制了一个元素,我只想要一个元素。

要查看我在说什么,请转到http://jsfiddle.net/MatthewKosloski/BHXMa/并输入消息,然后按Enter键。注意有两个“Foo!”消息?我只想要一个。我还想让这些消息按时间顺序从上到下排成,但是在我发现为什么会出现这种重复之前我不能这样做!

function insertAfter(referenceNode, newNode) {
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

var robotMessage = userMessage;

function intelResponse(){

        // ROBOT
        var robot = document.createElement("h4");
        var robotText = document.createTextNode("Robot");
        robot.appendChild(robotText);
        robot.className = "rtitle";
        document.body.appendChild(robot);
        insertAfter(userMessage, robot);

        // Robot's response
        robotMessage = document.createElement("span");
        var robotMessageText = document.createTextNode("FOO");
        robotMessage.appendChild(robotMessageText);
        robotMessage.className = "rmsg";
        document.body.appendChild(robotMessage);
        insertAfter(robot, robotMessage);

}

4 个答案:

答案 0 :(得分:1)

您正在通过“提交”例程调用“intelResponse”,并在之后显式调用“提交”例程。

答案 1 :(得分:1)

问题出在submitUserResponse函数的末尾,您还调用了intelResponse

答案 2 :(得分:1)

由于您将该功能调用两次,因此该消息将附加两次。

关键一次:

$(document).keyup(function (e) {
    if (e.keyCode == 13) {
        submitUserMessage();
        intelResponse();
        $("#user-input").val("");
    }
});

并在submitUserMessage中。

评论其中一个并且不重复:http://jsfiddle.net/BHXMa/2/

答案 3 :(得分:1)

一个非常简单的错误。您正在调用方法intelResponse两次。修复了问题FIDDLE

if (e.keyCode == 13) {
        submitUserMessage();
        //intelResponse();
        $("#user-input").val("");
    }