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

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

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

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

Q&A

解決済

2回答

7335閲覧

Uncaught TypeError: (intermediate value).create is not a function のエラー対応策

hokosugi

総合スコア63

JavaScript

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

0グッド

1クリップ

投稿2019/07/20 23:12

編集2019/07/21 00:48

javascript初心者です。
エクセル列名を数値に変換するコードをこちらの方のコードをコピペしてcodepenで実行しようとしましたが
Uncaught TypeError: (intermediate value).create is not a function
が出てきます。intermediate valueが関数でないと言うことなのですが対応策わかっていないです。

コード全体

js

1$(function() { 2 //列名テキストボックス 3  //(html) <input type="text" id="txtColName" class="TextBox"></div> 4 var txtColName = (new TextBox()).create($("#txtColName")[0]); 5 console.log("txtColName"); 6 txtColName_changingByCode = false; 7 txtColName.setOnEditChange(function() { 8 var THIS = this; 9 //doLater(function() { 10 if(!txtColName_changingByCode) { 11 txtColNumber_changingByCode = true; 12 if(!isAlpha(THIS.value)) { 13 txtColNumber.textbox.value = ''; 14 console.log("txtColName"); 15 } else { 16 var nam = THIS.value; 17 var num = getColNumber(nam); 18 txtColNumber.textbox.value = num; 19 console.log("txtColNumber"); 20 myScrlbar_changingByCode = true; 21 $('#myScrlbar').scrlbarPos(num); 22 } 23 } 24 txtColName_changingByCode = false; 25 //},500); 26 }); 27 28 //列番号テキストボックス 29 var txtColNumber = (new NumberTextBox()).create($("#txtColNumber")[0]); 30 var txtColNumber_changingByCode = false; 31 txtColNumber.setOnEditChange(function() { 32 var THIS = this; 33 if(!txtColNumber_changingByCode) { 34 txtColName_changingByCode = true; 35 if(!isNum(THIS.value) || THIS.value < org()) { 36 txtColName.textbox.value = ""; 37 } else { 38 var num = THIS.value; 39 var nam = getColName(num); 40 txtColName.textbox.value = nam; 41 42 myScrlbar_changingByCode = true; 43 $('#myScrlbar').scrlbarPos(num); 44 } 45 } 46 txtColNumber_changingByCode = false; 47 }); 48 49 myScrlbar_changingByCode = false; 50 createScrlbar(org() + 16383, org()); 51 $("#myScrlbar").scroll(function() { 52 if(!myScrlbar_changingByCode) { 53 var num = $("#myScrlbar").scrlbarPos(); 54 var nam = getColName(num); 55 56 txtColNumber_changingByCode = true; 57 txtColNumber.textbox.value = num; 58 59 txtColName_changingByCode = true; 60 txtColName.textbox.value = nam; 61 } 62 myScrlbar_changingByCode = false; 63 }); 64 txtColName.textbox.value = "A"; 65 66 67 $("table.colnummap tbody tr:even td:even").css('background-color', '#eed'); 68 $("table.colnummap tbody tr:even td:odd").css('background-color', '#ffe'); 69 $("table.colnummap tbody tr:odd td:even").css('background-color', '#dee'); 70 $("table.colnummap tbody tr:odd td:odd").css('background-color', '#eff'); 71}); 72 73function createScrlbar(maxValue, pos) { 74 $('#myScrlbar').scrlbar({ 75 dir:'h', //方向の指定 76 width:700, //画面上の幅。ピクセル単位。 77 minValue:org(), //スクロールバーのつまみが左端の時の論理値 78 maxValue:maxValue, //スクロールバーのつまみが右端の時の論理値 79 pageLen:15, //つまみの大きさを論理値で指定 80 value:pos //初期のつまみの位置を論理値で指定 81 }); 82} 83 84var CHAR_CODE_A = "A".charCodeAt(0); 85var CHAR_CODE_Z = "Z".charCodeAt(0); 86 87/** 88 * 文字列がすべてアルファベットかどうかを判定する。 89 * @param value 90 * @returns {Boolean} 91 */ 92function isAlpha(value) { 93 value = value.toUpperCase(); 94 var valid = true; 95 for(var i = 0; i < value.length; i++) { 96 var cc = value.charCodeAt(i); 97 if(cc < CHAR_CODE_A || CHAR_CODE_Z < cc) { 98 return false; 99 } 100 } 101 return true; 102} 103 104var CHAR_CODE_0 = "0".charCodeAt(0); 105var CHAR_CODE_9 = "9".charCodeAt(0); 106 107/** 108 * すべての文字が数字かどうかを判定する。 109 * @param value 110 * @returns {Boolean} 111 */ 112function isNum(value) { 113 var valid = true; 114 for(var i = 0; i < value.length; i++) { 115 var cc = value.charCodeAt(i); 116 if(cc < CHAR_CODE_0 || CHAR_CODE_9 < cc) { 117 return false; 118 } 119 } 120 return true; 121} 122 123/** 124 * 列名の桁 125 */ 126var NAME_COLUMN_VALUES = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(''); 127 128/** 129 * 桁の数 130 */ 131var NAME_COLUMN_VALUES_LENGTH = NAME_COLUMN_VALUES.length; 132 133/** 134 * 数値を列名に変換 135 * @param num 136 * @returns {String} 137 */ 138function getColName(num) { 139 var s = ""; 140 var col = 0; 141 do { 142 if(org() != 0 || col > 0) { 143 num--; 144 } 145 var mod = num % NAME_COLUMN_VALUES_LENGTH; 146 s = NAME_COLUMN_VALUES[mod] + s; 147 num = Math.floor(num / NAME_COLUMN_VALUES_LENGTH); 148 col++; 149 } while(num > 0); 150 return s; 151} 152 153/** 154 * 列名を列番号に変換 155 * @param name 156 * @returns {Number} 157 */ 158function getColNumber(name) { 159 var num = 0; 160 var s = name.toUpperCase().split(''); 161 $.each(s, function(i, c) { 162 var n = $.inArray(c, NAME_COLUMN_VALUES); 163 if(org() != 0 || i < s.length - 1) { 164 n++; 165 } 166 num = num * 26 + n; 167 }); 168 return num; 169} 170 171function TextBox() { 172 173}

エラー個所(3行目)

js

1var txtColName = (new TextBox()).create($("#txtColName")[0]);

調べたこと

ググってみるとstockoverflowでセミコロンをつけると良いとのことで(new TextBox();).createとか試してみましたが違うようです。そもそもセミコロンを付けることで解決するのかわかりません。
また、(new TextBox()).createのTextBox関数のnewオブジェクトをcreateメソッドで
生成する、、よくわからなのでこの構文を他の書き方で表すにはどうすれば良いかお教えてください。

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

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

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

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

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

hokosugi

2019/07/21 00:42

エラー文を検索して出てくるストックオーバーフローの質問文を読んで解決策を試してみたりしましたがエラー自体の意味は調べても出てこないためよくわかっていません。中間値(new TextBox())が関数ではないと言うこと自体がよく分からずMDNサイトでnewやcreateを調べて function TextBox(){}; を書き足したりしましたが改善せず投稿した次第です。
m.ts10806

2019/07/21 01:08 編集

Google翻訳で意味は出ますよ。私がコメントに提示した記事にも太字で 「もし読めない場合でも, Google 翻訳を使ってでも自力で読むようにしよう」とあります。
hokosugi

2019/07/21 01:15

今回の質問は「エラーの意味が分からない」ではなくて「エラーが意味する対応策」が何なのか、若しくは「コード自体が分かりにくいので他の書き方で意味すること教えて欲しい」といった趣旨ですのでご理解ください。
m.ts10806

2019/07/21 01:21

なるほど。タイトルと修正前の内容からはわからなかったのでそのようにしました。 ただ、「動かしたい」だけでは難しいと思います。 すでに別で指摘されていますが、「どのように動くのか」をきちんと説明できないからにはエラー解消だけで次には進みません。 エラー解消だけなら簡単かと思いますが、その後「ちゃんと想定通り動いている」と判断できるのでしょうか? あれもわからないこれもわからないと問題だらけになって質問しあげた挙句、他者に作ってもらっているような形になるのではないかという懸念をしています(それはもはや作業依頼です。最初から元のコードの制作者に聞くべき)
m.ts10806

2019/07/21 01:23 編集

せめてデバッグくらいは自身でできるようになってください。(文字列と変数の違いも理解されていないように見受けられます) エラーの原因はそこでわかります。
hokosugi

2019/07/21 01:39

ご指摘ありがとうございます。正直javascriptでコードを書くのが中々出来ずに焦ってます。まずは色んなコードを読み込んで理解を深めようとしたのですがレベルが高すぎたようです。この1行も何とか分解して理解に努めようとしたのですが出来ず仕舞いで悔しいです。とりあえず地道にやっていこうと思います。改めましてありがとうございました。
m.ts10806

2019/07/21 01:42

既に回答にも書きましたがコードはある1行が全てではなく全てが連携しています。全体を追っていく力が必要です。
hokosugi

2019/07/21 01:50

了解しました。まずは各行の理解、そして全体の理解をしていきたいと思います。
guest

回答2

0

エラー原因は下記で調べられます。

js

1console.log(new TextBox()); 2//出力結果:TextBox {}

TextBox というオブジェクトが生成されただけで中身は何も実装されていません。
なので、アプリケーションの仕様をきちんと整理したうえで即した実装をしてください。

そのためにはオブジェクトについてきちんと学ぶ必要がありますし
そもそものアプリケーションがどんな目的、どのような仕様なのかをきちんと整理する必要があります。

※もし「初心者」という自覚がきちんとあるのでしたら、今すぐ手におえるコードではありません。もっと簡単なところからやっていきましょう。

とりあえずオブジェクトについてドキュメントは置いておきます。

  • [JavaScript オブジェクトの基本

](https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/Basics)

投稿2019/07/21 01:34

m.ts10806

総合スコア80850

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

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

hokosugi

2019/07/21 01:55

リンクありがとうございます。兎に角、学習ですね。頑張ります。
m.ts10806

2019/07/21 02:08

学習は単なるインプットです。 プログラミングはほとんどアウトプットを出すための活動です。 失敗して覚えることのほうが多いです。
hokosugi

2019/07/21 03:33

了解しました。アウトプットメインでこれからやっていきます。ありがとうございました。
guest

0

ベストアンサー

(new TextBox()).create は関数ではありません。
というエラーです
そもそもこの行でなにをしようとしてるんでしょうか。

投稿2019/07/21 00:48

y_waiwai

総合スコア87747

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

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

hokosugi

2019/07/21 01:04

ご回答ありがとうござます。 >そもそもこの行でなにをしようとしてるんでしょうか。 それを知りたいと思っています。javascriptの学習のため、作ってみたかったエクセルの列名の数値変換をすでに作成していたサイトのコードを読み解くためコピペしたのですが、エラーが出たので読み解けなくなり困ってしました。ここに拘らず自力で作成していこうと考えていますが、少しでも理解が出来れば良いと質問した次第です。
y_waiwai

2019/07/21 01:15

わけのわからないコードをワケのわからないままコピペしたところで、わけがわからないのは変わりません 身に過ぎたことはあっさりやめて、コードを理解することに努めましょう
hokosugi

2019/07/21 01:25

了解です。おっしゃる通りです。普通の学習ではなかなか理解が進まず、実践形式ならば、と考えてことでしたが、無理がありました。地道にやっていきます。
y_waiwai

2019/07/21 01:48

実際に動いているコードを読みましょう。 そのうえで、コードを参考にしてコードを組むなら、しっかり理解したものを使うようにします。それでなおかつエラーが出るとか思うように動かないとなれば、ここが役に立つと思いますよ。
hokosugi

2019/07/21 01:54

いや上記のサイトは動いています。動いているのにcodepenにコピペしたらエラーが出るので不思議に思ったのです。コピペに不足があるのか?参照しているjQueryのバージョンが違うからなのかな?とか色々考えたのですがよく分からなかったため質問した次第です。
y_waiwai

2019/07/21 02:25

コードを組むならしっかり理解したものを使うようにする、と先に書きましたが、 その行でなにをしているのか、なにをさせようとしてるのか、という質問に答えられないのは、理解して使ってるようには見えないですね
hokosugi

2019/07/21 03:33

なるほど、簡単なものでもいいので作れるものから作っていく、そしてうまく動かないときはここに書く、という方向でやっていきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問