4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Vue.js】Safariでテキストエリアの改行・空白が無効になった話

Last updated at Posted at 2019-05-10

Vue.jsで作ったフォームをAndroid ChromeとiOS Safariでテストしていたら、Safariだけでテキストエリアの改行や空白が無効になる事象を発見。
どんなに検索しても類似の話題がヒットせず調査に時間がかかったのでまとめてみました。

#何が起こったのか
こうやって入力したかったのに・・・
理想.png

こうなった
現実.png
※テキストエリアはVuetifyを使用

アルファベットは理想通りだが、文字を入力するそばから改行やスペースが消えていってしまった。
このほか、スペイン語や韓国語などの文字をランダムで試したところアルファベットと同様の挙動で、
中国語は日本語と同様だった。

なんで・・・??

#原因調査
##1.前提の確認
普段はAndroidユーザーなので、念の為iOS Safariで前提を確認。

1.iOSのメモ帳で改行できること
2.HTMLのtextareaで改行できること
3.Vuetifyのv-textareaで改行できること

いずれも改行・空白が有効であることを確認。

##2.改行が有効なコードと無効なコードを比較

改行が有効なコード(Vuetify公式サンプルより抜粋)

Vuetify.vue
<v-textarea label="Label" value="value"></v-textarea>

改行が無効なコード(自分のコードより抜粋)

MyCode.vue
<v-textarea label="Label" v-model.trim="value"></v-textarea>

v-model.trim が怪しそう・・・

##3.VuetifyのCodePenをSafariで操作
さっき正常に動いたVuetifyのvalueをv-model.trimに変えると・・・
改行できなくなった!!!
さらにv-modelだけにすると・・・
改行できた!!!

MyCode.vue
<!--これだと改行・スペースが無視される-->
<v-textarea label="Label" v-model.trim="value"></v-textarea>

<!--これだと改行・スペースが無視されない-->
<v-textarea label="Label" v-model="value"></v-textarea>

スペースについても、同様の挙動。

#解決方法
v-model.trim="str"を使わずに、v-model="str"str.trim()を使う

#おわりに
Safariでは.trimを使うと、日本語入力した際に改行やスペース入力が無効になる場合があるようです。
(英語だと発生しないので、どんなに英語で検索しても出てこないはず・・・)
本当は入力値全体の前後の空白だけ除去する機能のはずですが、なぜ入力中に即時で除去していくのでしょうか?
さらに詳しい原因は.trimの仕様やSafariのテキストエリアの挙動や2バイト文字について調べる必要がありそうですが、一旦覚書まで・・・。
ご存知の方がいらっしゃいましたら、ご教示いただけますと幸いです。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?