【ASP.NET】MultiLineなTextBoxのMaxLength対応

結論

<%-- OnFocusイベントで関数を呼び出す --%>
<asp:TextBox ID="TextBox1" textmode="MultiLine" runat="server" OnFocus="setMaxLength(this,100)"/>

<%-- maxLengthプロパティを設定 --%>
<script>
    function setMaxLength(text, max) {
        text.maxLength = max;
    }
</script>


背景

※ OJT中なくらいの初心者なので情報があやふやかもしれませんがご容赦ください。
まずASP.NETがTextBoxを単一行ならinputタグ、複数行ならtextareaタグにそれぞれ振り分けている。そして昔(HTML5以前)はtextareaタグにはMaxLengthプロパティが存在しなかった。

そのため先人の方々は入力イベントを拾い、substringで無理やり文字数内に収めるという力技を駆使していらっしゃった。

substringで処理したときとinputタグのMaxLengthを指定した挙動が一緒だったら別にいいやってそのままお知恵を拝借していたと思う。
しかし時代は進化しHTML5が使用できるおかげでtextareaタグにもMaxLengthプロパティが使えるようになった。やったー!

ところが.Net Framework側が対応していないみたいで直接aspのタグに記入しても無視されるのでJavaScript側から無理やりプロパティをねじ込む仕様にした。
がんばって検索かけてみたけど同じような書き方している人が見つからなかったのでうまく動かないのか私の検索技術がないのかもっといい方法があるのかはわからないけどとりあえず共有。早く正規に実装してくれればいいのにな…

この記事が気に入ったらサポートをしてみませんか?