お世話になっております、石井と申します。
今、inputで打ち込まれた文字列をすべてunicodeで出したいのですが、やり方がわかりません。たぶんすごく初歩的なものだと思いますが助けていただければ助かります。
今までの記述です。```html
<input type="text" onKeypress="kanaFunction(event)">
javascript
1function kanaFunction(name){ 2 var x = event.charCode || event.keyCode; 3 var res = String.fromCharCode(x); 4 document.getElementById("uniCode").innerHTML=x+res; 5}
jQueryは使っておりません。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
inputで打ち込まれた文字列をすべてunicodeで出したい
JavaScriptの文字列は全てUnicodeです。
内部的にはUnicodeの表現であるUTF-16(または、UCS-2)で扱われています。
そして出力した時もそれは同じ、つまり、JavaScriptの文字列を表示すること=Unicodeで出力することです。
質問していることは恐らく、文字列の「Unicodeエスケープシーケンス」を出力したい、という事ではないでしょうか?
例えば、「あいうえお
」を「\u3042\u3044\u3046\u3048\u304a
」のように出力したい、という意味では?
以降では、これが求める解答であると仮定して話を進めます。
まず、String.fromCharCodeは間違いです。
これはUnicode番号の数値から、対応する文字を出力する関数です。
JavaScript
1alert(String.fromCharCode(12354)); 2// 「あ」を出力します。
文字からUnicode番号を出力したい場合、String.prototype.charCodeAtを利用します。
JavaScript
1alert('あ'.charCodeAt(0)); 2// 「12354」を出力します。
文字列を扱えるように関数化すると以下のようになります。
JavaScript
1/** 2 * 文字列に含まれる文字全てをUnicodeエスケープシーケンスに変換する 3 * 4 * @param {string} str 変換する文字列 5 * @return {string} 変換された文字列 6 */ 7function escapeUnicode(str) { 8 /** 9 * Unicodeエスケープシーケンスに変換された出力文字列 10 * @type {string} 11 */ 12 var unicode_escaped_str = ''; 13 /** 14 * 文字のインデックス番号 15 * @type {number} 16 */ 17 var index = 0; 18 /** 19 * 文字に対応するUnicode番号 20 * インデックス番号に対応する位置に文字がない場合、NaNが格納される 21 * @type {number} 22 */ 23 var char_code; 24 /** 25 * Unicode番号の16進数文字列 26 * @type {string} 27 */ 28 var hex_char_code; 29 30 /** 31 * 1文字ずつUnicode番号を取得し、処理を行う。 32 */ 33 while (!Number.isNaN(char_code = str.charCodeAt(index++))) { 34 /** 35 * 文字に対応するUnicode番号を16進数文字列に変換 36 * 4桁になるよう、0埋めも行う 37 * @link http://stabucky.com/wp/archives/4655 38 */ 39 hex_char_code = ('000' + char_code.toString(16)).slice(-4); 40 41 /** 42 * Unicodeエスケープシーケンスを出力文字列に追加 43 */ 44 unicode_escaped_str += '\\u' + hex_char_code; 45 } 46 47 return unicode_escaped_str; 48}
これを利用して、以下のようにすることで目的のコードが実現できます。
※escapeUnicode
関数は既に定義済みであるものとします。
HTML
1<input type="text" id="input"> 2<p id="output"></p>
JavaScript
1/** 2 * 要素にテキストを設定する。textContentプロパティのクロスブラウザ関数 3 * @param {Node} targetNode 設定対象の要素 4 * @param {string} text 設定するテキスト 5 */ 6var setText = 7 ('textContent' in document.documentElement) ? 8 function (targetNode, text) { 9 /** 10 * 対象要素のtextContentプロパティに新しいテキストを代入 11 */ 12 targetNode.textContent = text; 13 } : 14 function (targetNode, text) { 15 /** 16 * 対象要素内の全子要素を削除 17 */ 18 var childNode; 19 while ((childNode = targetNode.firstChild)) { 20 targetNode.removeChild(childNode); 21 } 22 /** 23 * テキストノードを挿入 24 */ 25 targetNode.appendChild( 26 targetNode.ownerDocument.createTextNode(text) 27 ); 28 } 29; 30 31function inputListener(e) { 32 var inputElem = e.target; 33 setText( 34 document.getElementById('output'), 35 escapeUnicode(inputElem.value) 36 ); 37} 38 39document.getElementById('input').addEventListener('input', inputListener, false);
ちなみにしれっと使っていますが、DOM要素に文字列を設定する場合はinnerHTML
ではなくtextContent
を利用してください。
このコードではtextContent
に対応していないブラウザのため、setText
関数を定義しています。
innerHTML
は処理が重い問題もあるため、可能な限り利用しないようにしましょう。
また、input要素の入力値はvalue
で取得できます。
charCode
またはkeyCode
は押されたキーボードのキーの番号を返すもので、これはキーボード操作をJavaScriptで実現する時などに利用します。
さらに、文字列が入力された時に処理を行う場合はkeydown
イベントやkeypress
イベントではなく、input
イベントを利用してください。
右クリックメニューでコピー&ペーストされた場合、keydown
イベントやkeypress
イベントでは処理されません。
このinput
イベントは古いブラウザには対応していないため、目的の環境で動作しない等の問題がありましたらお知らせください。
投稿2015/10/19 10:34
編集2015/10/20 08:31総合スコア697
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/20 03:32