前提・実現したいこと
Nuxt.js(Vue.js)で、ハッシュタグの数を数える簡単なシステムを作っています。
その中でワンタップで入力画面(textarea)にハッシュタグ「#」や半角スペース「 」を追加する機能を実装しようとしているのですが、一部うまく行きません。
具体的には、カーソルの位置に合わせて#を追加したら、カーソルの位置をその位置に残したいのですが、現状ではカーソルが外れるまたは一番後ろにフォーカスしてしまっています。
ハッシュタグ(#)を現在のカーソルの位置に追加して、追加したハッシュタグ(#)の後ろにカーソルを合わせたままにするにはどうすれば良いのでしょうか。
元のソースコードを踏まえても、全く別の方法でも構いませんのでご教示いただけると幸いです。
発生している問題・エラーメッセージ
コンソールにエラーは発生していません。
該当のソースコード
CSSフレームワークニVuetifyを利用しています。
Vue
1v-btn(@click="addHashtag(content)") # 2v-textarea(id="hashtag_input" ref="r" v-model="content" @input="updateValue" maxlength="500") 3 4<script> 5export default { 6 7 data () { 8 return { 9 content:'', 10 input_text:'', 11 }; 12 }, 13 14methods: { 15 // #をワンタップで追加する 16 addHashtag(content) { 17 18 var text_val = this.content 19 var all_len = text_val.length 20 var select_len = hashtag_input.selectionStart 21 var first = text_val.substr(0, select_len) 22 var insert = '#' 23 var latter = text_val.substr(select_len, all_len) 24 text_val = first + insert + latter 25 26 this.content = text_val 27 28 // 再描写してからフォーカスする(ここまではできている) 29 this.$nextTick(() => 30 this.$refs.r.focus(), 31 // フォーカスしてから再度カーソル位置を合わせたいがセレクションレンジが効かない 32 this.$refs.r.setSelectionRange(select_len+1,select_len+1), 33 ) 34 }, 35} 36</script> 37
補足情報(FW/ツールのバージョンなど)
Nuxt.js
Vuetify
###追加情報(2019/8/14 23時頃追記)
どうやら、setSelectionRangeがそもそもうまくいかないようです。
Vue
1v-btn(@click="cursorNow") テスト 2 3<script> 4 5methods: { 6 //これがダメ 7 cursorNow() { 8 this.$refs.r.focus(); 9 console.log('カーソルなう') 10 this.$refs.r.setSelectionRange(0,9999); 11 }, 12 13 //これでもダメ 14 cursorNow() { 15 this.$refs.r.focus(); 16 this.$nextTick(() => { 17 this.$refs.r.setSelectionRange(0,9999); 18 }); 19 }, 20} 21</script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/14 14:23
2019/08/15 10:10
2019/08/15 12:30
2019/08/15 12:41
2019/08/15 13:34 編集
2019/08/15 13:45