質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

3332閲覧

WebSocketでチャットをおこないたいが、表示のさせ方がおかしいです

Sfidante

総合スコア90

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2015/07/18 14:55

まずは、表示をどのようにしたいかお見せ致します。
![イメージ説明
最初の状態で、テキストに文字を入力して送信のボタンを押すと2段目のように、
ひとつのブロックに入力した文字が書かれてしまいます。
そうではなく、一番下のように
入力したら、別のブロックを生成して、更に時間も表示したいと考えております。

現状のコードを下記に記載致しますので、
ご教授お願い致します。

javascript

1<script type="text/javascript"> 2 var webSocket; 3 window.onload = function() { 4 var forRtoA = document.createElement('a'); 5 forRtoA.href = "loadMessage"; 6 webSocket = new WebSocket(forRtoA.href.replace("http://", "ws://").replace("https://", "wss://")); 7 var messageArea = document.getElementById("messageArea"); 8 9 var appendMessage = function(value, color) { 10 var messageElement = document.createElement("div"); 11 messageElement.style.color = color; 12 messageElement.innerText = value; 13 messageArea.insertBefore(messageElement, messageArea.firstChild); 14 } 15 webSocket.onmessage = function(message) { 16 var data = JSON.parse(message.data); 17 if ("message" == data.command) { 18 appendMessage(data.text, "black"); 19 } else if ("error" == data.command) { 20 appendMessage(data.text, "red"); 21 } 22 } 23 webSocket.onerror = function(message) { 24 appendMessage(message, "red"); 25 } 26 var messageInput = document.getElementById("messageInput"); 27 messageInput.onkeypress = function(e) { 28 if (13 == e.keyCode) { 29 var message = messageInput.value; 30 if (webSocket && "" != message) { 31 webSocket.send(message); 32 messageInput.value = ""; 33 } 34 } 35 } 36 } 37 38 function disp(){ 39 var date = new Date(); 40 var month = date.getMonth() + 1; 41 var day = date.getDate(); 42 var hours = date.Hours(); 43 var minutes = date.getMinutes(); 44 var time = month + "/" + day + " " + hours + ":" + minutes; 45 document.getElementsByClassName("time_send").value= time; 46 } 47</script>

html

1<c:forEach var="messagelist" items="${ requestScope.messageList }"> 2 <ul class="message-list"> 3 <c:if test="${ messagelist.userid == myuserid }" var="myuser"/> 4 <c:if test="${ !myuser }"> 5 <li class="msg_recieve"> 6 <a href="" target="_blank"> 7 <img src="<c:out value='${ UserProfile.photo }'/>" alt="メッセージ相手写真" class="c-message_photo img-circle c-photo_mini"> 8 </a> 9 <div class="inner-box"> 10 <p class="balloon_left"><c:out value="${ messagelist.message }"/></p> 11 <p class="time_recieve"><time datetime="2015-07-11T11:11"> 12 <fmt:formatDate value="${ messagelist.comment_time }" pattern="MM/dd"/> 13 <fmt:formatDate value="${ messagelist.comment_time }" type="TIME" timeStyle="SHORT"/> 14 </time></p> 15 </div> 16 </li> 17 </c:if> 18 <c:if test="${ myuser }"> 19 <li class="msg_send "> 20 <div class="inner-box"> 21 <p class="balloon_right" id="messageArea"><c:out value="${ messagelist.message }"/></p> 22 <p class="time_send"><time datetime="2015-07-11T11:11"> 23 <fmt:formatDate value="${ messagelist.comment_time }" pattern="MM/dd"/> 24 <fmt:formatDate value="${ messagelist.comment_time }" type="TIME" timeStyle="SHORT"/> 25 </time></p> 26 </div> 27 </li> 28 </c:if> 29 </ul> 30 </c:forEach>

また、相手が入力した文字も即座に表示できるようにしたいです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

appendMessageでテキストをp要素に追加するのではなく、ul要素のliを追加するようにすれば、テキスト入力でブロックが追加できます。その時に現在時刻を取得するか、テキスト入力のタイミングで現在時刻も一緒にサーバーに送信、クライアントで受信すれば時刻も表示可能です。
http://akioblog.com/2013/03/10/868/

テキストだけでなく、時刻もサーバーに送受信するのはjson形式などで工夫してやってみてください。
http://hakuhin.jp/js/json.html

また、相手が入力した文字も即座に表示できるようにしたいです。

サーバーサイドのWebsocket処理でブロードキャスト送信するか、ルーム毎の管理などをしたい場合は、対象ルームの全ユーザーに送信するような処理が必要になります。

サーバーサイドの実装がどうなっているか?Webscoketの通信の仕組みやDOM操作などおそらく不明確な部分が結構あるのではないでしょうか?部分的に不明な部分を都度実装するのではなく、仕組みを把握されてから実装した方がいいと思います。

投稿2015/07/19 03:03

chiku_

総合スコア1464

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問