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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Vue.js

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

0回答

677閲覧

electronでtextareaに入力不可となる

akirakond

総合スコア3

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Vue.js

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/11/21 14:50

electronのtextareaに入力ができなくなる、という事象について相談させてください。

親コンポーネント(memo.vue)に、ヘッダーとサイドバーを子コンポーネント(header.vue / sideBar.vue)として実装し、子コンポーネントのアクションを親コンポーネントに記載しています。

実装の内容は下記の通りです。
・ヘッダーの「保存」ボタンを押下した際に、textareaの内容を配列に保存(新規登録の場合は配列に追加、既存編集の場合は対象項目を上書き)しサイドバーに縦並びで一覧表示
・サイドバーの項目をクリックすると対象のメモの内容がtextareaに表示される

ここで下記の問題が起きています。
・「保存」ボタンを押下した際にtextareaの内容が変更不可となる。
・デバッグ実行し開発者ツールを開いている状態であれば、開発者ツールにて何かしらのアクション(何か項目を選択する等)すれば入力可能となる。

開発者ツールにて何かしらのアクションを行わなくても入力可能としたいのですがどのようにすればよいでしょうか。

何卒宜しくお願い致します。
【実装】
memo.vue

vue.js

1<template> 2 <div class='container'> 3 <headerVue class='header' 4 @saveChild="saveParent" 5 @addChild="addParent" 6 @delChild="delParent" 7 @outChild="outParent" 8 @settingChild="settingParent" /> 9 <div class='flex'> 10 <sideBarVue class="leftSidebar" :memoList = "memoList" @selectMemo="selectMemo" /> 11 <textarea spellcheck='false' v-model.lazy='textMemo' class='body' /> 12 </div> 13 </div> 14</template> 15 16<script> 17import headerVue from '../components/header.vue' 18import sideBarVue from '../components/sideBar.vue' 19 20export default { 21 data(){ 22 return{ 23 textMemo:'', 24 memoList:[{ 25 id:0, 26 memo:'' 27 }] 28 } 29 }, 30 components:{ 31 headerVue, 32 sideBarVue 33 }, 34 methods:{ 35 saveParent:function(){ 36 alert("保存ボタン押下") 37 38 // 既にメモリスト登録済か判断 39 if(sessionStorage.getItem("load")){ 40 let memoId = this.memoIDSearch() 41 // 登録中の場合、対象のメモ内容を上書き 42 this.memoList[memoId].memo = this.textMemo 43 }else{ 44 // 登録済ではない場合、新規登録用のIDを取得 45 let max = 0 46 if(this.memoList.length != 0){ 47 max = this.memoList.reduce(function (a, b) { 48 return a > b.id ? a : b.id 49 }, 0) 50 } 51 52 // memoListに新規登録 53 this.memoList.push({ 54 id:max +1, 55 memo:this.textMemo, 56 }) 57 58 // sessionStorageに保存する。 59 sessionStorage.setItem("load",max+1); 60 } 61 }, 62 addParent:function(){ 63 alert("追加ボタン押下") 64 65 // 他メモの編集中の場合、ポップアップを表示 66 if(sessionStorage.getItem("load")){ 67 if(window.confirm('現在の内容を保存しますか?')){ 68 let memoId = this.memoIDSearch() 69 this.memoList[memoId].memo = this.textMemo 70 } 71 } 72 73 this.textMemo = ''; 74 sessionStorage.removeItem("load"); 75 }, 76 delParent:function(){ 77 alert("削除ボタン押下") 78 if(sessionStorage.getItem("load")){ 79 if(window.confirm('現在の内容を削除しますか?')){ 80 let memoId = this.memoIDSearch(); 81 this.memoList[memoId].splice() 82 this.textMemo = ''; 83 } 84 }else{ 85 alert('対象のメモが存在しません') 86 } 87 }, 88 outParent:function(){ 89 alert("outボタン押下") 90 }, 91 settingParent:function(){ 92 alert("settingボタン押下") 93 }, 94 selectMemo:function(id){ 95 console.log(id) 96 let memoId = 0; 97 for(let i = 0;i<this.memoList.length;i++){ 98 if(this.memoList[i].id == id){ 99 memoId = i; 100 break; 101 } 102 } 103 this.textMemo = this.memoList[memoId].memo 104 }, 105 memoIDSearch:function(){ 106 let memoId = 0; 107 for(let i = 0;i<this.memoList.length;i++){ 108 if(this.memoList[i].id == sessionStorage.getItem("load")){ 109 memoId = i; 110 break; 111 } 112 } 113 return memoId; 114 } 115 } 116} 117</script> 118 119<!-- Add "scoped" attribute to limit CSS to this component only --> 120<style scoped> 121.container{ 122 width:100%; 123 height:90%; 124} 125.header{ 126 height:60px; 127 width:100%; 128 margin-left: 100px; 129} 130.flex{ 131 display: flex; 132} 133.leftSidebar{ 134 height:90%; 135 width:100px; 136} 137.body{ 138 height:90%; 139 font-size: 20px; 140 width:90%; 141} 142</style> 143

sideBar.vue

vue.js

1<template> 2 <div class="leftSidebar"> 3 <ul v-for="(item,index) in memoList" v-bind:key="index"> 4 <li><a @click="selectMemo(item.id)"> {{ item.memo }}</a></li> 5 </ul> 6 </div> 7</template> 8 9<script> 10export default { 11 props:["memoList"], 12 methods:{ 13 selectMemo: function (id) { 14 this.$emit('selectMemo',id) 15 } 16 } 17} 18</script> 19<style scoped> 20.leftSidebar{ 21 width:100px; 22} 23li{ 24 list-style:none; 25 margin:8px; 26 width:20px; 27} 28</style>

header.vue

vue.js

1<template> 2 <div class="header"> 3 <a @click="save" class="btn-gradient-flat"> 4 <span>保存</span> 5 </a> 6 <a @click="add" class="btn-gradient-flat"> 7 <span>追加</span> 8 </a> 9 <a @click="del" class="btn-gradient-flat"> 10 <span>削除</span> 11 </a> 12 <a @click="out" class="btn-gradient-flat"> 13 <span>出力</span> 14 </a> 15 <a @click="setting" class="btn-gradient-flat"> 16 <span>設定</span> 17 </a> 18 </div> 19</template> 20 21<script> 22export default { 23 methods:{ 24 save:function(){ 25 this.$emit('saveChild'); 26 }, 27 add:function(){ 28 this.$emit('addChild'); 29 }, 30 del:function(){ 31 this.$emit('delChild'); 32 }, 33 out:function(){ 34 this.$emit('outChild'); 35 }, 36 setting:function(){ 37 this.$emit('settingChild'); 38 } 39 } 40} 41</script> 42<style scoped> 43.header{ 44 display: -webkit-flex; 45 display: -moz-flex; 46 display: -ms-flex; 47 display: -o-flex; 48 display: flex; 49} 50.btn-gradient-flat { 51 display: flex; 52 padding: 0.3em 1em; 53 text-decoration: none; 54 color: #67c5ff; 55 border: solid 2px white; 56 border-radius: 3px; 57 transition: .4s; 58 59 justify-content: center; 60 align-items: center; 61 62 font-size: 25px; 63} 64.btn-gradient-flat:hover { 65 background: #67c5ff; 66 color: white; 67} 68</style>

【環境】
windows10
electron:v13.6.1
@vue/cli:4.5.15

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問