1

さて、チャットボットを作っているのですが、問題が発生しました。そのため、Enter キーが押されるたびにチャット メッセージを作成する関数を作成する必要があります。これまでのところ、問題は 1 つだけですが、順調に進んでいます。要素を複製していますが、そのうちの 1 つだけが必要です。

私が話していることを確認するには、http://jsfiddle.net/MatthewKosloski/BHXMa/にアクセスしてメッセージを入力し、Enter キーを押します。「Foo!」が 2 つあることに注意してください。メッセージ?1つだけ欲しい。また、これらのメッセージを時系列で上から下に並べたいと思いますが、この重複が発生している理由を突き止めるまで、それはできません!

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

関数を 2 回呼び出すため、メッセージが 2 回追加されます。

キーアップで 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

非常に単純な間違いです。メソッドを 2 回呼び出していintelResponseます。問題を修正しまし

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