2013-07-21 5 views
1

좋아요, 그래서 대화방을 만들고 있는데 문제가 생겼습니다. 따라서 Enter 키를 누를 때마다 채팅 메시지를 작성하는 기능을 만들어야합니다. 지금까지 문제가 발생했습니다. 단지 하나의 문제입니다. 그것은 단지 요소 중 하나만 필요로하는 요소를 복제하고 있습니다.insertAfter()는 요소를 복사하지 않으려 고합니다.

내가 말하는 내용을 보려면 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); 

} 
+1

이것은'intelResponse'를 두 번 호출하기 때문입니다. 이벤트 처리기 내부 및 'submitUserMessage' 함수 내부 –

답변

1

매우 간단한 실수. 메소드 intelResponse을 두 번 호출하고 있습니다. 이슈를 수정했습니다. FIDDLE

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

감사합니다. 작동합니다! 내가 그걸 놓쳤다는 것을 믿을 수 없어 .. – Matthew

+0

@MattKnowsTech : 그것은 항상 개발자를 얻는 작은 문제이다. D –

1

당신은 "제출"루틴에서 "intelResponse"를 호출하고, 또한 명시 적으로 후에는 "제출"루틴을 호출합니다.

1

문제는 당신이 또한 당신이 두 번 함수를 호출하기 때문에 메시지가 두 번 추가됩니다 intelResponse

1

를 호출 submitUserResponse 기능의 끝에 자리 잡고 있습니다. 의 keyup에

한 시간 :

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

그리고 submitUserMessage에서

.

코멘트 그 중 하나가 중복 나던 : http://jsfiddle.net/BHXMa/2/

관련 문제