1

好的,所以我正在制作一个聊天机器人,但遇到了问题。所以我需要创建一个函数,每次按下回车键时都会创建一条聊天消息。到目前为止,它的表现很好,只是一个问题。它复制了一个元素,我只想要一个。

要查看我在说什么,请访问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

4 回答 4

1

您正在从“提交”例程中调用“intelResponse”,并且在您调用“提交”例程之后也显式调用。

于 2013-07-21T18:54:16.143 回答
1

问题出在函数的末尾submitUserResponse,您还可以在其中调用intelResponse

于 2013-07-21T18:54:36.027 回答
1

该消息附加了两次,因为您调用了该函数两次。

一次上键:

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

并在 submitUserMessage 中。

评论其中一个,它不会重复:http: //jsfiddle.net/BHXMa/2/

于 2013-07-21T18:55:28.933 回答
1

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

if (e.keyCode == 13) {
        submitUserMessage();
        //intelResponse();
        $("#user-input").val("");
    }
于 2013-07-21T18:56:20.290 回答