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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

Q&A

解決済

2回答

6035閲覧

Vue.js inputの入力がEnter押下で消える

g-n-n

総合スコア24

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

0グッド

0クリップ

投稿2020/04/05 07:20

編集2020/04/05 08:27

#環境
Vue.js CDN (latest?)
Vue-js-modal.js CDN
Vue-lazyload.js CDN

#問題

html

1<div id="inputBox"> 2 <input type="text" class="searchInputTextBox" v-model.trim="searchWord"> 3</div> 4 5<div id="authorList" class="column"> 6 <ul> 7 <template-author v-for="listItem in authorList" :value="listItem" @open-id="openMethod"></template-author> 8 </ul> 9</div>

javaScript

1computed: { 2 searchWord: { 3 set(inputtedWord) { 4 this.authorList = dataList.filter(dataListItem => dataListItem.authorNameKana.match(inputtedWord)) 5 } 6 } 7 }

どこまでコードを乗せたらいいのかわからなかったので対象の場所だけ載せました。
このコードでinputに文字(全角)を入力しEnterを押すと、inputに入力した文字が消えてしまい、入力したものを変更することができません。
Enterを押してもinputの中に入力した文字を残しておくためにはどのようなことをすればよいでしょうか。

追記:
文字を入力しEnterを押すと、文字に対応するものだけリスト表示されるものです。
現状では文字を入力しEnterを押すと、正しくリストが表示されます。が、inputの中身がなくなってしまうので、リストを再度更新することができません(たとえば、「りんご」と入力してリストを表示させた後、全部入力を削除して元のリスト表示に戻すなど)

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

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

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

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

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

guest

回答2

0

自己解決

データを更新することにこだわりすぎていました。以下のコードによって、inputに入力があった際、リストを絞り込んで表示する。そして、inputの入力値はそのまま保持しておくことができました。(そもそも消えるのは作りが間違っていたから正しく作れば消えない)

html

1<div id="inputBox"> 2 <input type="text" class="searchInputTextBox" v-model.trim="searchWord"> 3</div> 4 5<div id="authorList"> 6 <ul> 7 <template-author v-for="listItem in searchWordInList" :value="listItem" @open-id="openMethod"></template-author> 8 </ul> 9</div>

JavaScript

1data: function(){ 2return { 3 ... 4 searchWord: '' 5 } 6} 7 8computed: { 9 searchWordInList() { 10 return dataList.filter(dataListItem => dataListItem.authorNameKana.match(this.searchWord)); 11 } 12}

cf, https://blog.capilano-fw.com/?p=648

投稿2020/04/07 02:49

g-n-n

総合スコア24

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

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

0

form絡みだと思いますので、HTMLファイルの情報が足りないように思います。

文字が、消えたあとどういう挙動になっているのでしょうか。

おそらくここが答えになるような気がしています。

投稿2020/04/05 08:21

mackintosh

総合スコア228

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

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

g-n-n

2020/04/05 08:29 編集

説明を追記をしました。コンソールにエラーなどの表示がないため、消えてしまう理由がいまいちつかめていません...
mackintosh

2020/04/05 08:41

まだ載せていない部分はありませんか? setterしか定義してないからだと思いますよ。
g-n-n

2020/04/05 08:46

>setterしか定義していないため というのは他に何かする必要があるということだと思うのですが、それが何か私には理解できていません... なお、formに関連した部分はこれが全てになります。よろしくお願いします
mackintosh

2020/04/05 08:58 編集

ではauthorListに値が追加されていることは確認できていますか? authorListに値が追加されたら、質問されているフォームはどうなってほしいのですか? この質問を見た人は、あなたがどういう仕様にしたいのかの前提情報が分かりません。
g-n-n

2020/04/05 09:36

authorListに問題はなく、authorListを更新した後、searchWordのvalueが空になってしまう問題(つまりフォームがクリアされる)が解決できません。inputに文字を入力し、enterを押した後もフォームに入力した文字が残るようにしたいです。
mackintosh

2020/04/05 10:46 編集

v-modelにはsearchWordを指定していますが searchWordはsetterしか定義されていません。 getterが定義されていないのが原因です。 enterを押した後もフォームに入力した文字が残るようにしたいということであれば、getterも定義し、authorListの最後の配列を取得してreturnするような処理が必要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問