質問編集履歴

7

解を追記

2017/12/20 01:12

投稿

nexco
nexco

スコア12

test CHANGED
File without changes
test CHANGED
@@ -271,3 +271,139 @@
271
271
  </html>
272
272
 
273
273
  ```
274
+
275
+
276
+
277
+ ##成果物
278
+
279
+ [karamarimo](https://teratail.com/users/karamarimo)様の回答がベースとなっています。
280
+
281
+ ```
282
+
283
+ <head>
284
+
285
+ <title></title>
286
+
287
+ </head>
288
+
289
+ <body>
290
+
291
+ <table id="outside">
292
+
293
+ <tr>
294
+
295
+ <td>
296
+
297
+ <form class="simple-form" id="t1">one</form>
298
+
299
+ </td>
300
+
301
+ </tr>
302
+
303
+ <tr>
304
+
305
+ <td id="t2">two</td>
306
+
307
+ </tr>
308
+
309
+ </table> <button onclick="replaceElement()">要素を置き換え</button>
310
+
311
+ <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
312
+
313
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
314
+
315
+ <script type="text/javascript">
316
+
317
+
318
+
319
+ function replaceElement() {
320
+
321
+ //テキストボックスに変更
322
+
323
+ var element = document.getElementById("t1");
324
+
325
+ var newElement = document.createElement("input");
326
+
327
+ newElement.setAttribute("type", "text");
328
+
329
+ newElement.setAttribute("id", "ipt");
330
+
331
+ newElement.setAttribute("value", document.getElementById("t1").innerHTML);
332
+
333
+ var target = element.childNodes.item(0);
334
+
335
+ element.replaceChild(newElement, target);
336
+
337
+ }
338
+
339
+ $(function () {
340
+
341
+ $('.simple-form').on('submit', function () {
342
+
343
+ //変更後の値を送信
344
+
345
+ var $input = $(this).children('input[type=text]');
346
+
347
+ var text = $input.val();
348
+
349
+ var formdata = new FormData();
350
+
351
+ formdata.append('newtext', text);
352
+
353
+ $.ajax({
354
+
355
+ url: 'action_rename.php',
356
+
357
+ type: 'POST',
358
+
359
+ data: formdata,
360
+
361
+ cache: false,
362
+
363
+ contentType: false,
364
+
365
+ processData: false,
366
+
367
+ dataType: 'text'
368
+
369
+ }).done(function (j_data, textStatus, jqXHR) {
370
+
371
+ alert('成功');
372
+
373
+ }).fail(function (jqXHR, textStatus, errorThrown) {
374
+
375
+ alert('失敗');
376
+
377
+ });
378
+
379
+ //テキストボックスを削除
380
+
381
+ var node = document.getElementById("ipt");
382
+
383
+ if (node.parentNode) {
384
+
385
+ node.parentNode.removeChild(node);
386
+
387
+ }
388
+
389
+ //表示を変更後の値に変更
390
+
391
+ var info = document.getElementById('t1');
392
+
393
+ var textNode = document.createTextNode(text);
394
+
395
+ info.appendChild(textNode);
396
+
397
+ return false
398
+
399
+ })
400
+
401
+ })
402
+
403
+ </script>
404
+
405
+ </body>
406
+
407
+ </html>
408
+
409
+ ```

6

項目追加

2017/12/20 01:12

投稿

nexco
nexco

スコア12

test CHANGED
File without changes
test CHANGED
@@ -112,6 +112,8 @@
112
112
 
113
113
 
114
114
 
115
+ ##追記
116
+
115
117
  3.エンターで変更を確定までのソースコード(仮)
116
118
 
117
119
  ```

5

ソースコードのインデント調整

2017/12/19 03:29

投稿

nexco
nexco

スコア12

test CHANGED
File without changes
test CHANGED
@@ -124,165 +124,145 @@
124
124
 
125
125
  <head>
126
126
 
127
- <title></title>
127
+ <title></title>
128
128
 
129
129
  </head>
130
130
 
131
131
  <body>
132
132
 
133
- <table id="outside">
134
-
135
- <tr>
136
-
137
- <td id="t1">one</td>
138
-
139
- </tr>
140
-
141
- <tr>
142
-
143
- <td id="t2">two</td>
144
-
145
- </tr>
146
-
147
- </table>
148
-
149
- <pre id="rslt" class="">&nbsp;</pre>
150
-
151
- <button onclick="replaceElement()">要素を置き換え</button>
152
-
153
- <input type="button" id="btn" class="btn btn-default" value="確定" />
154
-
155
- <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
156
-
157
- <script type="text/javascript">
158
-
159
- function replaceElement() {
160
-
161
- var element = document.getElementById("t1");
162
-
163
- var newElement = document.createElement("input");
164
-
165
- newElement.setAttribute("type", "text");
166
-
167
- newElement.setAttribute("id", "ipt");
168
-
169
- newElement.setAttribute("value", document.getElementById("t1").innerHTML);
170
-
171
- var target = element.childNodes.item(0);
172
-
173
- element.replaceChild(newElement, target);
174
-
175
-
176
-
177
- }
178
-
179
-
180
-
181
- (function () {
182
-
183
- var oncomplete = function (event) {
184
-
185
- $('#rslt').html($('#ipt').val() || '&nbsp;');
186
-
187
- };
188
-
189
-
190
-
191
- var document_onready = function (event) {
192
-
193
- $('#ipt').complete(oncomplete);
194
-
195
- $('#btn').on('click', oncomplete);
196
-
197
- };
198
-
199
-
200
-
201
- $(document).ready(document_onready);
202
-
203
- })();
204
-
205
-
206
-
207
- (function (window, document, $, undefined) {
208
-
209
- /**
210
-
211
- * テキスト入力が確定したとき指定されたイベントハンドラを呼び出します。
212
-
213
- * @param handler {function} イベントハンドラ。イベントハンドラは jQuery.Event を引数とる
214
-
215
- * @return {jQuery} jQueryオブジェクト
216
-
217
- */
218
-
219
- $.fn.complete = function (handler) {
220
-
221
- var ENTER_KEY = 13;
222
-
223
- var keypressed = false;
224
-
225
-
226
-
227
- /**
228
-
229
- * keypressイベント発生時に呼び出されます。
230
-
231
- * @param event {jQuery.Event} イベントオブジェクト
232
-
233
- */
234
-
235
- var onkeypress = function (event) {
236
-
237
- if (event.keyCode !== ENTER_KEY) {
238
-
239
- return;
240
-
241
- }
242
-
243
- keypressed = true;
244
-
245
- };
246
-
247
-
248
-
249
- /**
250
-
251
- * keyupイベント発生時に呼び出されます。
252
-
253
- * @param event {jQuery.Event} イベントオブジェクト
254
-
255
- */
256
-
257
- var onkeyup = function (event) {
258
-
259
- if (event.keyCode === ENTER_KEY && keypressed) {
260
-
261
- // 入力確定のイベントを発生させます。
262
-
263
- handler.call(this, event);
264
-
265
- }
266
-
267
- keypressed = false;
268
-
269
- };
270
-
271
-
272
-
273
- // 各要素に対してイベントを付与します。
274
-
275
- return this.each(function (index) {
276
-
277
- $(this).on('keypress', onkeypress).on('keyup', onkeyup);
278
-
279
- });
280
-
281
- };
282
-
283
- })(window, document, jQuery);
284
-
285
- </script>
133
+ <table id="outside">
134
+
135
+ <tr>
136
+
137
+ <td id="t1">one</td>
138
+
139
+ </tr>
140
+
141
+ <tr>
142
+
143
+ <td id="t2">two</td>
144
+
145
+ </tr>
146
+
147
+ </table>
148
+
149
+ <pre id="rslt" class="">&nbsp;</pre> <button onclick="replaceElement()">要素を置き換え</button> <input type="button" id="btn" class="btn btn-default" value="確定" />
150
+
151
+ <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
152
+
153
+ <script type="text/javascript">
154
+
155
+ function replaceElement() {
156
+
157
+ var element = document.getElementById("t1");
158
+
159
+ var newElement = document.createElement("input");
160
+
161
+ newElement.setAttribute("type", "text");
162
+
163
+ newElement.setAttribute("id", "ipt");
164
+
165
+ newElement.setAttribute("value", document.getElementById("t1").innerHTML);
166
+
167
+ var target = element.childNodes.item(0);
168
+
169
+ element.replaceChild(newElement, target);
170
+
171
+ }
172
+
173
+ (function () {
174
+
175
+ var oncomplete = function (event) {
176
+
177
+ $('#rslt').html($('#ipt').val() || '&nbsp;');
178
+
179
+ };
180
+
181
+ var document_onready = function (event) {
182
+
183
+ $('#ipt').complete(oncomplete);
184
+
185
+ $('#btn').on('click', oncomplete);
186
+
187
+ };
188
+
189
+ $(document).ready(document_onready);
190
+
191
+ })();
192
+
193
+ (function (window, document, $, undefined) {
194
+
195
+ /**
196
+
197
+ * テキスト入力が確定したとき指定されたイベントハンドラを呼び出します。
198
+
199
+ * @param handler {function} イベントハンドラ。イベントハンドラは jQuery.Event を引数にとる。
200
+
201
+ * @return {jQuery} jQueryオブジェクト
202
+
203
+ */
204
+
205
+ $.fn.complete = function (handler) {
206
+
207
+ var ENTER_KEY = 13;
208
+
209
+ var keypressed = false;
210
+
211
+ /**
212
+
213
+ * keypressイベント発生時呼び出されます
214
+
215
+ * @param event {jQuery.Event} イベントオブジェクト
216
+
217
+ */
218
+
219
+ var onkeypress = function (event) {
220
+
221
+ if (event.keyCode !== ENTER_KEY) {
222
+
223
+ return;
224
+
225
+ }
226
+
227
+ keypressed = true;
228
+
229
+ };
230
+
231
+ /**
232
+
233
+ * keyupイベント発生時に呼び出されます。
234
+
235
+ * @param event {jQuery.Event} イベントオブジェクト
236
+
237
+ */
238
+
239
+ var onkeyup = function (event) {
240
+
241
+ if (event.keyCode === ENTER_KEY && keypressed) {
242
+
243
+ // 入力確定のイベントを発生させます。
244
+
245
+ handler.call(this, event);
246
+
247
+ }
248
+
249
+ keypressed = false;
250
+
251
+ };
252
+
253
+ // 各要素に対してイベントを付与します。
254
+
255
+ return this.each(function (index) {
256
+
257
+ $(this).on('keypress', onkeypress).on('keyup', onkeyup);
258
+
259
+ });
260
+
261
+ };
262
+
263
+ })(window, document, jQuery);
264
+
265
+ </script>
286
266
 
287
267
  </body>
288
268
 

4

3.までのソースを追記

2017/12/19 03:27

投稿

nexco
nexco

スコア12

test CHANGED
File without changes
test CHANGED
@@ -109,3 +109,183 @@
109
109
  </td>
110
110
 
111
111
  ```
112
+
113
+
114
+
115
+ 3.エンターで変更を確定までのソースコード(仮)
116
+
117
+ ```
118
+
119
+ <!--
120
+
121
+ テーブルのt1部分を入力とするコード
122
+
123
+ -->
124
+
125
+ <head>
126
+
127
+ <title></title>
128
+
129
+ </head>
130
+
131
+ <body>
132
+
133
+ <table id="outside">
134
+
135
+ <tr>
136
+
137
+ <td id="t1">one</td>
138
+
139
+ </tr>
140
+
141
+ <tr>
142
+
143
+ <td id="t2">two</td>
144
+
145
+ </tr>
146
+
147
+ </table>
148
+
149
+ <pre id="rslt" class="">&nbsp;</pre>
150
+
151
+ <button onclick="replaceElement()">要素を置き換え</button>
152
+
153
+ <input type="button" id="btn" class="btn btn-default" value="確定" />
154
+
155
+ <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
156
+
157
+ <script type="text/javascript">
158
+
159
+ function replaceElement() {
160
+
161
+ var element = document.getElementById("t1");
162
+
163
+ var newElement = document.createElement("input");
164
+
165
+ newElement.setAttribute("type", "text");
166
+
167
+ newElement.setAttribute("id", "ipt");
168
+
169
+ newElement.setAttribute("value", document.getElementById("t1").innerHTML);
170
+
171
+ var target = element.childNodes.item(0);
172
+
173
+ element.replaceChild(newElement, target);
174
+
175
+
176
+
177
+ }
178
+
179
+
180
+
181
+ (function () {
182
+
183
+ var oncomplete = function (event) {
184
+
185
+ $('#rslt').html($('#ipt').val() || '&nbsp;');
186
+
187
+ };
188
+
189
+
190
+
191
+ var document_onready = function (event) {
192
+
193
+ $('#ipt').complete(oncomplete);
194
+
195
+ $('#btn').on('click', oncomplete);
196
+
197
+ };
198
+
199
+
200
+
201
+ $(document).ready(document_onready);
202
+
203
+ })();
204
+
205
+
206
+
207
+ (function (window, document, $, undefined) {
208
+
209
+ /**
210
+
211
+ * テキスト入力が確定したとき指定されたイベントハンドラを呼び出します。
212
+
213
+ * @param handler {function} イベントハンドラ。イベントハンドラは jQuery.Event を引数にとる。
214
+
215
+ * @return {jQuery} jQueryオブジェクト
216
+
217
+ */
218
+
219
+ $.fn.complete = function (handler) {
220
+
221
+ var ENTER_KEY = 13;
222
+
223
+ var keypressed = false;
224
+
225
+
226
+
227
+ /**
228
+
229
+ * keypressイベント発生時に呼び出されます。
230
+
231
+ * @param event {jQuery.Event} イベントオブジェクト
232
+
233
+ */
234
+
235
+ var onkeypress = function (event) {
236
+
237
+ if (event.keyCode !== ENTER_KEY) {
238
+
239
+ return;
240
+
241
+ }
242
+
243
+ keypressed = true;
244
+
245
+ };
246
+
247
+
248
+
249
+ /**
250
+
251
+ * keyupイベント発生時に呼び出されます。
252
+
253
+ * @param event {jQuery.Event} イベントオブジェクト
254
+
255
+ */
256
+
257
+ var onkeyup = function (event) {
258
+
259
+ if (event.keyCode === ENTER_KEY && keypressed) {
260
+
261
+ // 入力確定のイベントを発生させます。
262
+
263
+ handler.call(this, event);
264
+
265
+ }
266
+
267
+ keypressed = false;
268
+
269
+ };
270
+
271
+
272
+
273
+ // 各要素に対してイベントを付与します。
274
+
275
+ return this.each(function (index) {
276
+
277
+ $(this).on('keypress', onkeypress).on('keyup', onkeyup);
278
+
279
+ });
280
+
281
+ };
282
+
283
+ })(window, document, jQuery);
284
+
285
+ </script>
286
+
287
+ </body>
288
+
289
+ </html>
290
+
291
+ ```

3

画像の説明を追加

2017/12/19 03:21

投稿

nexco
nexco

スコア12

test CHANGED
File without changes
test CHANGED
@@ -21,6 +21,8 @@
21
21
  0. 【作成済み】受け取った値からDB内のファイル名を変更
22
22
 
23
23
 
24
+
25
+ GIFファイル。クリックで再生します。
24
26
 
25
27
  ![イメージ説明](85785ad4e188f7d53d7d10728141e9e7.gif)
26
28
 

2

全体を書き直しました

2017/12/18 05:27

投稿

nexco
nexco

スコア12

test CHANGED
File without changes
test CHANGED
@@ -1,44 +1,42 @@
1
1
  簡単なオンラインストレージを作成しています。
2
2
 
3
- ファイル名の変更を作りたいと思っているのですが
3
+ の中でファイル名の変更UI(?)を作りたいと思っているのですが
4
4
 
5
- どのようにしたらいいわかりません。
5
+ JavaScriptの知識がなく、どのようにすれば分かりません。
6
6
 
7
- 理想としては、Dropboxような「名前を変更」を選択 ⇒ ファイル名部分が編集画面(?)にるようなもりたいと思っています。
7
+ DBの変更など実際処理は成済みです。
8
8
 
9
9
 
10
10
 
11
- ![参考例](0642f9fe217d8923a0cc5c48452543dc.png)
11
+ 完成形としては画像のような
12
12
 
13
-
14
-
15
- JQueryでできそうですが、よくわかりません。
16
-
17
- よろしくお願いいたします。
18
-
19
-
20
-
21
- ##追記
22
-
23
- バックエンド(PHP & SQL)部分は作成済みなのですが、そこにPOSTをするまでのフロントエンドサイド(?)の作り方がよくわかりません。
24
-
25
-
26
-
27
- 一応流れとしては次のような感じを予定しています。
28
-
29
-
30
-
31
- 0. 下記の”ファイル名変更”リンクをクリック
13
+ 0. ”ファイル名変更”をクリック
32
14
 
33
15
  0. ファイル名部分(”新しいファイル”)がテキストボックスになり編集可能状態に
34
16
 
35
- 0. エンター or ボックス外クリックで変更を確定
17
+ 0. エンターで変更を確定
36
18
 
37
19
  0. 変更内容をpostで送信
38
20
 
39
21
  0. 【作成済み】受け取った値からDB内のファイル名を変更
40
22
 
23
+
24
+
25
+ ![イメージ説明](85785ad4e188f7d53d7d10728141e9e7.gif)
26
+
27
+
28
+
29
+ 3.の部分は次のプラグインを使うことでできそうなのですが、
30
+
31
+ https://garafu.blogspot.jp/2015/09/jquery-complete.html
32
+
41
- ※post値などは特に決めていません。
33
+ 2.部分が検討もつきません。
34
+
35
+
36
+
37
+ ヒント等でも結構ですので、お力添えをいただけると幸いです。
38
+
39
+ よろしくお願いいたします。
42
40
 
43
41
 
44
42
 
@@ -65,8 +63,6 @@
65
63
  </thead>
66
64
 
67
65
  <tbody>
68
-
69
- <tr>
70
66
 
71
67
  <tr>
72
68
 

1

ソースを含めた詳細を追記

2017/12/18 05:24

投稿

nexco
nexco

スコア12

test CHANGED
File without changes
test CHANGED
@@ -15,3 +15,99 @@
15
15
  JQueryでできそうですが、よくわかりません。
16
16
 
17
17
  よろしくお願いいたします。
18
+
19
+
20
+
21
+ ##追記
22
+
23
+ バックエンド(PHP & SQL)部分は作成済みなのですが、そこにPOSTをするまでのフロントエンドサイド(?)の作り方がよくわかりません。
24
+
25
+
26
+
27
+ 一応流れとしては次のような感じを予定しています。
28
+
29
+
30
+
31
+ 0. 下記の”ファイル名変更”リンクをクリック
32
+
33
+ 0. ファイル名部分(”新しいファイル”)がテキストボックスになり編集可能状態に
34
+
35
+ 0. エンター or ボックス外クリックで変更を確定
36
+
37
+ 0. 変更内容をpostで送信
38
+
39
+ 0. 【作成済み】受け取った値からDB内のファイル名を変更
40
+
41
+ ※postの値などは特に決めていません。
42
+
43
+
44
+
45
+ ```
46
+
47
+ <table class="table table-striped table-hover">
48
+
49
+ <thead>
50
+
51
+ <tr>
52
+
53
+ <th class="col-md-8 col-xs-8">File Name</th>
54
+
55
+ <th class="col-md-4 col-xs-4">Date</th>
56
+
57
+ <th class="table_setting">
58
+
59
+ <i class="glyphicon glyphicon-cog"></i>
60
+
61
+ </th>
62
+
63
+ </tr>
64
+
65
+ </thead>
66
+
67
+ <tbody>
68
+
69
+ <tr>
70
+
71
+ <tr>
72
+
73
+ <th>新しいファイル</th>
74
+
75
+ <th>2019-06-08</th>
76
+
77
+ <td class="table_setting">
78
+
79
+ <div class="btn-group">
80
+
81
+ <button class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
82
+
83
+ <i class="glyphicon glyphicon-option-horizontal"></i>
84
+
85
+ </button>
86
+
87
+ <ul class="dropdown-menu dropdown-menu-right">
88
+
89
+ <li>
90
+
91
+ <a href="action_attribute.php?file_id=XX&action=favorite&token=">お気に入り</a>
92
+
93
+ </li>
94
+
95
+ <li>
96
+
97
+ <a href="">ファイル名の変更</a>
98
+
99
+ </li>
100
+
101
+ <li>
102
+
103
+ <a href="action_attribute.php?file_id=XX&action=delete&token=">ファイル削除</a>
104
+
105
+ </li>
106
+
107
+ </ul>
108
+
109
+ </div>
110
+
111
+ </td>
112
+
113
+ ```