2013-07-21 66 views
1

好吧,我正在製作聊天機器人,並且遇到了問題。所以我需要創建一個函數,每次按下回車鍵時都會創建一條聊天消息。到目前爲止,它出現的很好,只是一個問題。它是複製一個元素,我只想要其中之一。insertAfter()在我不想要的時候複製了一個元素

要查看我在說什麼,請轉至http://jsfiddle.net/MatthewKosloski/BHXMa/並輸入消息,然後按回車。注意有兩個「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); 

} 
+1

這是因爲您正在調用'intelResponse'兩次。一旦進入事件處理程序並進入'submitUserMessage'函數。 –

回答

1

一個非常簡單的錯誤。您正在調用方法intelResponse兩次。解決了問題FIDDLE

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

謝謝,它的工作原理!不能相信我錯過了... – Matthew

+0

@MattKnowsTech:它總是讓開發者的小問題:D –

1

你從「提交」例行呼籲「intelResponse」,並也明確後調用「提交」程序。

1

問題就出在submitUserResponse功能,在這裏你還呼籲intelResponse

1

因爲你調用該函數兩次消息追加兩次結束。

一個時間上KEYUP:

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

而在submitUserMessage。

評論者之一,它不重複:http://jsfiddle.net/BHXMa/2/

相關問題