質問: 20; for(i=0;i maxlen){ this.value.substr(0 ,20); // string += STR[i]; }; console.log(len); }; }; // コメントありがとうモーダル表示 function c_done(){ $("#done").modal(); } ```
回答: > > this.value.substr(0 ,20)としましたが > > Cannot read property 'substr' of undefinedとでます > > > エラーになっているのは`this.value.substr(0, 20)`の`this`がテキストエリアを指していないので、valueが取れない(stringではない)ためだと思います。 **正解かどうか別として、**下記で動くのは動きます。 質問文からテキストエリア内に全半角が混ざるという意味だととらえています。 ※「以上」と「より大きい」をすごーーーくよく間違えるので、★のところのiは違ったら微調整してください。 ``` ``` ``` function TextLength( that ) { // that = textarea const str = that.value; var len = 0; var string = ""; var maxlen = 20; for(i=0;i maxlen){ that.value=str.substr(0 ,i); // ★ // this.value.substr(0 ,20); // string += STR[i]; }; }; }; ``` ただあんまりお勧めしないです。。。 以前私も似たようなことをしたのですが、入力中のひらがな状態で判定されてしまって「漢字に変換したら文字内に収まるのに、素直に入力できなくてストレス!」と苦情になりました。 あとブラウザか何かが出してくる「予測候補」とかから選択する文字数オーバーでも入ってしまいますし...。 Kosuke_Shibuyaさんが言われている通りonchangeでチェックするか、文字を切らずに警告(色を赤くするなど)にとどめる方が良いと思います。