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

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

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

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

Q&A

解決済

1回答

11722閲覧

vue.jsでテキストボックスをクリアしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

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

0グッド

0クリップ

投稿2020/04/19 20:32

前提・実現したいこと

vue.jsで簡単な検索フォームを作っています。
input textをリセットする際、テキストボックスをクリアしたいです。
初歩的な質問かもしれませんがよろしくお願いします。

発生している問題・エラーメッセージ

データ初期化のコードを入れず実行すると上手くいくのですが
テキストボックスの文字がクリアされずに
文字の右側にfocusがあたってしまいます。

該当のソースコード

var vm = new Vue({
el: '#app',
data: {
items: [],
textInput: ''
},
methods: {
focusInput: function() {
//■これを入れると動作しなくなるthis.items=[];
this.items=[];
this.$refs.mytext.value='';
this.$refs.mytext.focus();

},

}
});

試したこと

this.items=[];消すと上手くいきます。

補足情報(FW/ツールのバージョンなど)

javascriptの書き方だと思うのですが、順番を変えても同じ現象となります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

HTMLのテンプレート部分はどのように記述されていますか?

一般的には直接DOMにアクセスする$refsではなく、v-modelというディレクティブを使ってinputの値を変更することが多いです。

投稿2020/04/19 23:47

tsuyo_244

総合スコア219

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

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

退会済みユーザー

退会済みユーザー

2020/04/20 00:06

おせわになります。v-modelは使っているのですが、ある記事で4resを使うように ありましたので・・・。v-modelで書く場合は動作するのでしょうか・・。 少し試してみます・・。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHP+mysqlデータ取得(検索パラメータあり)</title> <link rel="stylesheet" type="text/css" href="css/my.css"> </head> <H1>Vue.js(axios)版―検索条件を指定してください</H1> <body> <div id="app"> <p> id検索: <input type="text" v-model="textInput" ref="mytext"> <button @click="request(textInput)">検索</button> <input type="button" @click="focusInput()" value="再検索"> </p>
退会済みユーザー

退会済みユーザー

2020/04/20 00:19

下記のように修正してみましたが駄目でした・・・。 var vm = new Vue({ el: '#app', data: { items: [], textInput: '' }, mounted () { this.$refs.mytext.focus(); //起動時   this.$refs.mytext.style.backgroundColor = '#e6e6fa' ; }, methods: {    focusInput: function() { //refで任意のタグ名とする(推奨) this.textInput=''; //this.items=[]; this.$refs.mytext.value=''; this.$refs.mytext.focus(); //this.del();//メソッド内で別のメソッドを呼び出す },
tsuyo_244

2020/04/20 12:29 編集

なるほど...いただいた情報を元に手元でやってみたんですが、 this.items=[];が付いていても問題なく動作するようでした。 もしかしたらテンプレート側でthis.itemsを使っている箇所に関係があるのかもしれないです。 ``` <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>VueTest</title> </head> <body> <div id="app"> <p><input type="text" v-model="textInput" ref="mytext"></p> <button @click="request(textInput)">検索</button> <input type="button" @click="focusInput()" value="再検索"> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { items: [], textInput: '' }, mounted () { this.$refs.mytext.focus(); this.$refs.mytext.style.backgroundColor = '#e6e6fa' ; }, methods: { focusInput: function() { this.items = []; this.textInput = ''; this.$refs.mytext.focus(); }, request() { console.log(this.textInput); } } }); </script> </body> </html> ```
退会済みユーザー

退会済みユーザー

2020/04/20 19:24

this.items[];の部分を入れるとinput textにフォーカスはあたるのですがテキストがクリアされ ずという状況です。この部分はaxiosで取得したテーブルが検索結果として表示される部分で 再検索ごとに非表示にしています。 取り急ぎご回答いただきましてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問