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メソッドで
生成する、、よくわからなのでこの構文を他の書き方で表すにはどうすれば良いかお教えてください。
回答2件
あなたの回答
tips
プレビュー