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

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

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

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

Q&A

解決済

3回答

2873閲覧

入力した値の分、連番で文字列を出力したい

Hinata_5846

総合スコア10

JavaScript

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

0グッド

0クリップ

投稿2018/02/20 14:53

編集2018/02/22 00:28

入力フォームに任意の値を入力して、その分だけ連番で文字列を出力するプログラムを考えています。
出力する文字列はゼロパティングとUTF-16形式への変換を行います。 
ソースは以下の通りですが、IEの開発者ツールで実行すると、5桁までは「3030303035」というように出力されるのですが、入力フォームに6以上の値を入力すると、6桁目以降が「NAN」と出力されてしまいます。
どこをどう直したらよいでしょうか?

Javascript

1<html><head> 2<title>連番出力</title> 3</head> 4<SCRIPT type="text/JavaScript"> 5 6function zeroPadding(){ 7 // 入力値取得 8 cStr = document.myform5.text0.value; 9 // 領域設定 10 var oText = ""; 11 var oText2 = ""; 12 var numx = ""; 13 // 変換処理 14 for (i=0; i<cStr; i++) { 15 // 入力値をゼロパティング 16 num = i+1; 17 var numx = ('00000' + num).slice(-5); 18 oText2 = numx.charCodeAt(i).toString(16).toUpperCase(); 19 oText += oText2; 20 // 最後以外は改行付加 21 if(i != cStr - 1){ 22 oText += "\n"; 23 } 24 // 領域初期化 25 oText2 = ""; 26 } 27 document.myform5.text2.value = oText; 28} 29 30</SCRIPT> 31<body> 32<br> 33<br> 34<br> 35連番出力 36<FORM NAME="myform5"><PRE> 37出力件数:<INPUT TYPE="text" name="text0" size=10> <INPUT TYPE="button" VALUE="実行" onClick="zeroPadding();"> 38出力結果:<INPUT TYPE="text" name="text2" size=60> 39</PRE></FORM> 40</body> 41</html>

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

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

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

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

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

kei344

2018/02/20 16:20

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
Hinata_5846

2018/02/21 00:29

承知しました。ただいま修正しました。
kei344

2018/02/22 03:12

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。
x_x

2018/02/22 04:31

連番とは? "6"を入力すると"000006"の2文字目以降に対して順に6回処理され最後にNaNを返しますが、これは想定外ということでしょうか?
Hinata_5846

2018/02/22 04:38

はい。想定とは異なる動きです。ただ原因は判明していて、numxが5文字までしかないのに6文字目以降の変換処理をしようとしていたためにNaNが返ってきていました。
guest

回答3

0

下記2点の方が問題のような。

functionの引数に数字が直接指定されているところ

javascript

1function zeroPadding(num,5){

→ Uncaught SyntaxError: Unexpected number

呼び出しのところにどこにも定義されていない変数が引数で使われているところ

html

1onClick="zeroPadding(num,5);"

→ Uncaught ReferenceError: num is not defined

投稿2018/02/21 01:12

m.ts10806

総合スコア80850

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

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

Hinata_5846

2018/02/22 00:22

ご指摘を踏まえ、以下の修正を行いました function zeroPadding(num,5){ →function zeroPadding(){ onClick="zeroPadding(num,5); →onClick="zeroPadding(); これで動きはしたのですが、また別の問題が発生しました。 修正後のコードと発生したことを質問に反映させました。
m.ts10806

2018/02/22 04:24

>var numx = ('00000' + num).slice(-5); 5桁0埋め固定だからではないかと。 入力情報に応じて可変にしてはいかがでしょうか。
guest

0

<script>が末尾にあるのがまずいんじゃないでしょうか。 あと<head>が閉じていませんね。

投稿2018/02/20 16:23

KojiDoi

総合スコア13671

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

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

Hinata_5846

2018/02/21 00:25

scriptとbodyの記載順はどっちが先でも変わらないと思っていました。 <head>が閉じていないのは単純ミスです。
guest

0

自己解決

ご指摘ありがとうございました。
自己解決したので以下にソースを記載します。
修正点は主に2つです。
・6以上を入力するとNaNが出力される問題
→ゼロパティング後の文字列を1文字ずつ変換することで解消。
・出力結果が1行しか出力されない問題
→出力結果をテキストボックスではなく、テキストエリアにして、改行したことが反映されるように変更。

質問の書き方等、至らぬところがあったことはこの場をお借りしておわびします。

Javascript

1<html><head> 2<title>連番出力</title> 3</head> 4<SCRIPT type="text/JavaScript"> 5 6function zeroPadding(){ 7 // 入力値取得 8 cStr = document.myform5.text0.value; 9 // 領域初期設定 10 var oText = ""; 11 var oText2 = "00"; 12 var numx = ""; 13 // 変換処理 14 for (i=0; i<cStr; i++) { 15 // 入力値をゼロパティング 16 num = i+1; 17 var numx = ('00000' + num).slice(-5); 18 // ゼロパティングしたものを1文字ずつ変換 19 var j = 0; 20 while (j<numx.length){ 21 // 領域初期化 22 oText2 = "00"; 23 // ワーク領域にバイナリ形式に変換した文字列を後方に付加 24 oText2 += numx.charCodeAt(j).toString(16).toUpperCase(); 25 oText += oText2; 26 j++; 27 } 28 // 最後以外は改行付加 29 if(i != cStr - 1){ 30 oText += "\n"; 31 } 32 } 33 document.myform5.text2.value = oText; 34} 35 36</SCRIPT> 37<body> 38<br> 39<br> 40<br> 41連番出力 42<FORM NAME="myform5"><PRE> 43出力件数:<INPUT TYPE="text" name="text0" size=10> <INPUT TYPE="button" VALUE="実行" onClick="zeroPadding();"> 44出力結果:<br><br><TEXTAREA name="text2" rows="50" cols="90"></TEXTAREA> 45</PRE></FORM> 46</body> 47</html>

投稿2018/02/22 06:40

Hinata_5846

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問