質問編集履歴

3

コードの編集

2019/02/02 06:39

投稿

rails_ruby
rails_ruby

スコア87

test CHANGED
@@ -1 +1 @@
1
- Jvascript: val()で取り出した値を使う方法
1
+ Jvascript: input内のvalueを使う方法
test CHANGED
@@ -29,6 +29,8 @@
29
29
  ```html
30
30
 
31
31
  <p>現在の設定状況<br>
32
+
33
+ var name_start = document.getElementById('#sample').value;
32
34
 
33
35
  <% @r_start.each do |start_times| %>
34
36
 
@@ -82,9 +84,9 @@
82
84
 
83
85
  **追記**
84
86
 
85
- rubyの変数を直接、jsに入れる事ができないと調べたらわかったので、一旦変数の中身をinputに表示させてval()でvalueの値を取得することにしました。
87
+ rubyの変数を直接、jsに入れる事ができないと調べたらわかったので、一旦変数の中身をinputに表示させてvalueの値を取得することにしました。
86
88
 
87
- val()でinputの中身を取得する事はできたのですが、
89
+ 値は取得できたのですが、それを入れたい部分に記述する方法が分かりません。
88
90
 
89
91
  ### 補足情報(FW/ツールのバージョンなど)
90
92
 

2

質問の変更

2019/02/02 06:38

投稿

rails_ruby
rails_ruby

スコア87

test CHANGED
@@ -1 +1 @@
1
- Jvascript: new Dateにデータ埋め込む方法
1
+ Jvascript: val()で取り出した値使う方法
test CHANGED
@@ -4,239 +4,49 @@
4
4
 
5
5
  開発する中で、一部のコードをJavascriptで書くことになり、JS内にデータを埋め込みたいです。
6
6
 
7
+ 下記のコードのval()のあたりを入れたい。
7
8
 
9
+ ```
8
10
 
9
- ■■な機能を実装中以下エラーメッセージが発生しまし
11
+ begin = new Date (Date.UTC (1970,0,1, 9,00)),//ここの**9,00**val()値を入れ
12
+
13
+ ```
10
14
 
11
15
 
12
16
 
13
- ### 発生している問題・エラーメッセージ
17
+ inputのvalueに入っている値は12:00になります。
14
18
 
15
- データはrubyの変数に代入されているのでそれをJSに埋め込むと、jsで書いたコードが動かなくなります。
16
19
 
17
- ```
18
20
 
21
+ ### 該当のソースコード
22
+
23
+ ```ruby
24
+
19
- begin = new Date (Date.UTC (<%= @r_start %>)),//列のスタート時間
25
+ @r_start = VBookEnd.all
20
26
 
21
27
  ```
22
28
 
23
- ### 該当のソースコード
24
-
25
29
  ```html
26
30
 
31
+ <p>現在の設定状況<br>
32
+
27
- <div id="calendar"></div>
33
+ <% @r_start.each do |start_times| %>
34
+
35
+ <input name="sample" value="<%= start_times.end_time.strftime("%H:%M") %>", class='sample' readonly>
36
+
37
+ <% end %>
28
38
 
29
39
  ```
30
40
 
31
41
  ```javascript
32
42
 
33
- <script>
34
-
35
- {
36
-
37
- const
38
-
39
- day_name = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
40
-
41
- day_jname = ['Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.'],
42
-
43
- doc = document;
44
-
45
-
46
-
47
- const
48
-
49
- A = (e, ...a) => a.map (a => e.appendChild (doc.createElement (a))),
50
-
51
- B = (d, n) => d.setDate (d.getDate () + n),
52
-
53
- C = d => [d.getFullYear (), '年', d.getMonth () + 1 , '月'].join (''),
54
-
55
- D = d => [('0' + d.getHours ()).slice (-2), ('0' + d.getMinutes ()).slice (-2)].join (':'),
56
-
57
- E = (e, d) => {
58
-
59
- let
60
-
61
- [a,,b] = A (e, 'label', 'br', 'label'),
62
-
63
- w = d.getDay () ;
64
-
65
- a.textContent = d.getDate ();
66
-
67
- b.textContent = day_jname[w];
68
-
69
- e.classList.add (day_name[w]);
70
-
71
- },
72
-
73
- F = d => {
74
-
75
- let m = d.getMonth ();
76
-
77
- return [0,31,59,90,120,151,181,212,243,273,304,334][m] + d.getDate() - 1 +
78
-
79
- (new Date (d.getFullYear (), m + 1,0) === 29 && 0 < m);
80
-
81
- },
82
-
83
- G = ary => ary.reduce ((a, b) => {
84
-
85
- let
86
-
87
- c = typeof b === 'string' ? new Date (b +':00.000+09:00'): b,
88
-
89
- d = D (c);
90
-
91
- if (! (d in a)) a[d] = [];
92
-
93
- a[d][F(c)] = true;
94
-
95
- return a;
96
-
97
- }, { })
98
-
99
- ,
100
-
101
- H = d => new Date (d.getFullYear (), d.getMonth (), d.getDate ()),
102
-
103
- I = d => [('0' + d.getUTCHours ()).slice (-2), ('0' + d.getUTCMinutes ()).slice (-2)].join (':')
104
-
105
- ;
106
-
107
-
108
-
109
-
110
-
111
- class Shedule {
112
-
113
- constructor (date = new Date, range = 7, plan = []) {
114
-
115
- this.current = H (date);
116
-
117
- this.date = H (date);
118
-
119
- this.range = range;
120
-
121
- this.plan = G (plan);
122
-
123
- this.table = document.createElement ('table');
124
-
125
-
126
-
127
- this.remake ();
128
-
129
- }
130
-
131
-
132
-
133
-
134
-
135
- add (day = this.range) {
136
-
137
- let d = H (this.current);
138
-
139
- d.setDate (d.getDate () + day);
140
-
141
- if (+this.date <= +d) {
142
-
143
- this.current = d;
144
-
145
- this.remake ();
146
-
147
- }
148
-
149
- }
150
-
151
-
152
-
153
-
154
-
155
- remake () {
156
-
157
- this.prev_btn = this.next_btn = null;
158
-
159
- let t = this.table;
160
-
161
- [...t.childNodes].forEach (e => e.remove ());
162
-
163
-
164
-
165
- let
166
-
167
- h = t.createTHead (),
168
-
169
- tr0 = h.insertRow (-1),
170
-
171
- tr1 = h.insertRow (-1),
172
-
173
- d = H (this.current),
174
-
175
- s = tr0.insertCell (-1),
176
-
177
- c = 1,
178
-
179
- m = d.getMonth ();
180
-
181
-
182
-
183
- for (let i = 0; i < this.range; i++, c++, B (d, 1)) {
184
-
185
- let td = tr1.insertCell (-1);
186
-
187
- if (m !== d.getMonth ()) {
188
-
189
- s.colSpan = c - 1;
190
-
191
- s = tr0.insertCell (-1);
192
-
193
- m = d.getMonth ();
194
-
195
- c = 1;
196
-
197
- }
198
-
199
- s.textContent = C (d);
200
-
201
- E (td, d);
202
-
203
- }
204
-
205
- s.colSpan = c - 1;
206
-
207
-
208
-
209
- let e = tr0.insertCell (0);
210
-
211
- e.textContent = '前の一週間';
212
-
213
- e.classList.add ('button');
214
-
215
- e.rowSpan = 2;
216
-
217
- this.prev_btn = e;
218
-
219
-
220
-
221
- e = tr0.insertCell (-1);
222
-
223
- e.textContent = '次の一週間';
224
-
225
- e.classList.add ('button');
226
-
227
- e.rowSpan = 2;
228
-
229
- this.next_btn = e;
230
-
231
-
232
-
233
43
  //__
234
44
 
235
45
  let
236
46
 
237
- begin = new Date (Date.UTC (<%= @r_start %>)),//スタート時間
47
+ begin = new Date (Date.UTC (1970,0,1, 9,00)),//ここにval()値を入れたい
238
48
 
239
- end = new Date (Date.UTC (<%= @r_finish %>))),//列の終了時間
49
+ end = new Date (Date.UTC (1970,0,1, 24,30)),//列の終了時間
240
50
 
241
51
  step = new Date (Date.UTC (1970,0,1, 0,30)),//列の感覚調整時間
242
52
 
@@ -245,154 +55,6 @@
245
55
  rst = [ ];
246
56
 
247
57
 
248
-
249
- for (let d = begin; d < end; d = new Date (+step + (+d))) {
250
-
251
- let
252
-
253
- a = new Array (this.rangi),
254
-
255
- b = I (d),
256
-
257
- c = this.plan[b] || [];
258
-
259
-
260
-
261
- for (let i = 0; i < this.range; i++)
262
-
263
- a[i] = c[o + i] ? '-' : '◎';
264
-
265
-
266
-
267
- rst.push ([b, ...a, b]);
268
-
269
- }
270
-
271
-
272
-
273
- let [tb] = A (t, 'tbody');
274
-
275
- rst.forEach (r => {
276
-
277
- let tr = tb.insertRow (-1);
278
-
279
- r.forEach (c => tr.insertCell (-1).textContent = c)
280
-
281
- });
282
-
283
-
284
-
285
- }
286
-
287
-
288
-
289
- handleEvent ({target: t}) {
290
-
291
- if (t === this.prev_btn) this.add (-this.range);
292
-
293
- if (t === this.next_btn) this.add (this.range);
294
-
295
- }
296
-
297
-
298
-
299
- }
300
-
301
-
302
-
303
- this.Shedule = Shedule;
304
-
305
- }
306
-
307
-
308
-
309
- const BUSY = [
310
-
311
- '2019-02-12T10:00',
312
-
313
- '2019-02-12T10:30',
314
-
315
- '2019-02-13T10:00',
316
-
317
- '2019-02-02T10:00',
318
-
319
- '2019-02-02T10:30',
320
-
321
- '2019-02-03T10:00',
322
-
323
- '2019-02-03T10:30',
324
-
325
- '2019-02-09T10:00',
326
-
327
- '2019-02-09T10:30',
328
-
329
- '2019-02-09T23:30'
330
-
331
- ];
332
-
333
-
334
-
335
-
336
-
337
- let a = new Shedule (new Date, 14, BUSY), {table: b} = a;
338
-
339
- document.querySelector ('#calendar').appendChild (b);
340
-
341
- b.addEventListener ('click', a, false);
342
-
343
-
344
-
345
- /*let c = new Shedule (new Date,7,BUSY), {table: d} = c;
346
-
347
- document.querySelector ('#calendar').appendChild (d);
348
-
349
- d.addEventListener ('click', c, false);*/
350
-
351
-
352
-
353
- var today = new Date();
354
-
355
- var year = today.getFullYear();
356
-
357
- var month = today.getMonth() + 1;
358
-
359
- var day = today.getDate();
360
-
361
- var tds = document.querySelectorAll('td');
362
-
363
- var yobi= new Array("日","月","火","水","木","金","土");
364
-
365
- document.getElementById('acdn-target').value = year+'年'+month+'月'+ day+'日 '+yobi[day]+'曜日';
366
-
367
-
368
-
369
-
370
-
371
- document.querySelector('#calendar').addEventListener('click', event => {
372
-
373
- const target = event.target;
374
-
375
- if (target.nodeName.toLowerCase() !== 'td') {
376
-
377
- return true;
378
-
379
- }
380
-
381
- const time = target.parentNode.cells[0].textContent;
382
-
383
- const table = target.closest('table');
384
-
385
- const date = table.tHead.rows[1].cells[target.cellIndex - 1].textContent;
386
-
387
-
388
-
389
- document.getElementById('acdn-target').value = year+'年'+ month + '月' + date + '日' +yobi[day]+'曜日'+ time;
390
-
391
- return true;
392
-
393
- }, false);
394
-
395
- </script>
396
58
 
397
59
  ```
398
60
 
@@ -416,6 +78,14 @@
416
78
 
417
79
  ```erb```では<%= %>のようにすると表示させることがデータ内の情報を表示させることができるので、JSでも同じように書いてみたのですが表示させることが出来ませんでした。
418
80
 
81
+
82
+
83
+ **追記**
84
+
85
+ rubyの変数を直接、jsに入れる事ができないと調べたらわかったので、一旦変数の中身をinputに表示させてval()でvalueの値を取得することにしました。
86
+
87
+ val()でinputの中身を取得する事はできたのですが、
88
+
419
89
  ### 補足情報(FW/ツールのバージョンなど)
420
90
 
421
91
  ruby on rails5.2 javascript myspl 2

1

コードの追記

2019/02/02 06:30

投稿

rails_ruby
rails_ruby

スコア87

test CHANGED
File without changes
test CHANGED
@@ -22,17 +22,377 @@
22
22
 
23
23
  ### 該当のソースコード
24
24
 
25
-
25
+ ```html
26
+
27
+ <div id="calendar"></div>
28
+
29
+ ```
26
30
 
27
31
  ```javascript
28
32
 
29
- //~.html.erbファイルで書いています。
30
-
31
- begin = new Date (Date.UTC (<%= @r_start %>)),//列のスタート時間
32
-
33
- end = new Date (Date.UTC (<%= @r_finish %>))),//列の終了時間
34
-
35
- step = new Date (Date.UTC (1970,0,1, 0,30)),//列の感覚調整時間
33
+ <script>
34
+
35
+ {
36
+
37
+ const
38
+
39
+ day_name = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
40
+
41
+ day_jname = ['Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.'],
42
+
43
+ doc = document;
44
+
45
+
46
+
47
+ const
48
+
49
+ A = (e, ...a) => a.map (a => e.appendChild (doc.createElement (a))),
50
+
51
+ B = (d, n) => d.setDate (d.getDate () + n),
52
+
53
+ C = d => [d.getFullYear (), '年', d.getMonth () + 1 , '月'].join (''),
54
+
55
+ D = d => [('0' + d.getHours ()).slice (-2), ('0' + d.getMinutes ()).slice (-2)].join (':'),
56
+
57
+ E = (e, d) => {
58
+
59
+ let
60
+
61
+ [a,,b] = A (e, 'label', 'br', 'label'),
62
+
63
+ w = d.getDay () ;
64
+
65
+ a.textContent = d.getDate ();
66
+
67
+ b.textContent = day_jname[w];
68
+
69
+ e.classList.add (day_name[w]);
70
+
71
+ },
72
+
73
+ F = d => {
74
+
75
+ let m = d.getMonth ();
76
+
77
+ return [0,31,59,90,120,151,181,212,243,273,304,334][m] + d.getDate() - 1 +
78
+
79
+ (new Date (d.getFullYear (), m + 1,0) === 29 && 0 < m);
80
+
81
+ },
82
+
83
+ G = ary => ary.reduce ((a, b) => {
84
+
85
+ let
86
+
87
+ c = typeof b === 'string' ? new Date (b +':00.000+09:00'): b,
88
+
89
+ d = D (c);
90
+
91
+ if (! (d in a)) a[d] = [];
92
+
93
+ a[d][F(c)] = true;
94
+
95
+ return a;
96
+
97
+ }, { })
98
+
99
+ ,
100
+
101
+ H = d => new Date (d.getFullYear (), d.getMonth (), d.getDate ()),
102
+
103
+ I = d => [('0' + d.getUTCHours ()).slice (-2), ('0' + d.getUTCMinutes ()).slice (-2)].join (':')
104
+
105
+ ;
106
+
107
+
108
+
109
+
110
+
111
+ class Shedule {
112
+
113
+ constructor (date = new Date, range = 7, plan = []) {
114
+
115
+ this.current = H (date);
116
+
117
+ this.date = H (date);
118
+
119
+ this.range = range;
120
+
121
+ this.plan = G (plan);
122
+
123
+ this.table = document.createElement ('table');
124
+
125
+
126
+
127
+ this.remake ();
128
+
129
+ }
130
+
131
+
132
+
133
+
134
+
135
+ add (day = this.range) {
136
+
137
+ let d = H (this.current);
138
+
139
+ d.setDate (d.getDate () + day);
140
+
141
+ if (+this.date <= +d) {
142
+
143
+ this.current = d;
144
+
145
+ this.remake ();
146
+
147
+ }
148
+
149
+ }
150
+
151
+
152
+
153
+
154
+
155
+ remake () {
156
+
157
+ this.prev_btn = this.next_btn = null;
158
+
159
+ let t = this.table;
160
+
161
+ [...t.childNodes].forEach (e => e.remove ());
162
+
163
+
164
+
165
+ let
166
+
167
+ h = t.createTHead (),
168
+
169
+ tr0 = h.insertRow (-1),
170
+
171
+ tr1 = h.insertRow (-1),
172
+
173
+ d = H (this.current),
174
+
175
+ s = tr0.insertCell (-1),
176
+
177
+ c = 1,
178
+
179
+ m = d.getMonth ();
180
+
181
+
182
+
183
+ for (let i = 0; i < this.range; i++, c++, B (d, 1)) {
184
+
185
+ let td = tr1.insertCell (-1);
186
+
187
+ if (m !== d.getMonth ()) {
188
+
189
+ s.colSpan = c - 1;
190
+
191
+ s = tr0.insertCell (-1);
192
+
193
+ m = d.getMonth ();
194
+
195
+ c = 1;
196
+
197
+ }
198
+
199
+ s.textContent = C (d);
200
+
201
+ E (td, d);
202
+
203
+ }
204
+
205
+ s.colSpan = c - 1;
206
+
207
+
208
+
209
+ let e = tr0.insertCell (0);
210
+
211
+ e.textContent = '前の一週間';
212
+
213
+ e.classList.add ('button');
214
+
215
+ e.rowSpan = 2;
216
+
217
+ this.prev_btn = e;
218
+
219
+
220
+
221
+ e = tr0.insertCell (-1);
222
+
223
+ e.textContent = '次の一週間';
224
+
225
+ e.classList.add ('button');
226
+
227
+ e.rowSpan = 2;
228
+
229
+ this.next_btn = e;
230
+
231
+
232
+
233
+ //__
234
+
235
+ let
236
+
237
+ begin = new Date (Date.UTC (<%= @r_start %>)),//列のスタート時間
238
+
239
+ end = new Date (Date.UTC (<%= @r_finish %>))),//列の終了時間
240
+
241
+ step = new Date (Date.UTC (1970,0,1, 0,30)),//列の感覚調整時間
242
+
243
+ o = F (this.current),
244
+
245
+ rst = [ ];
246
+
247
+
248
+
249
+ for (let d = begin; d < end; d = new Date (+step + (+d))) {
250
+
251
+ let
252
+
253
+ a = new Array (this.rangi),
254
+
255
+ b = I (d),
256
+
257
+ c = this.plan[b] || [];
258
+
259
+
260
+
261
+ for (let i = 0; i < this.range; i++)
262
+
263
+ a[i] = c[o + i] ? '-' : '◎';
264
+
265
+
266
+
267
+ rst.push ([b, ...a, b]);
268
+
269
+ }
270
+
271
+
272
+
273
+ let [tb] = A (t, 'tbody');
274
+
275
+ rst.forEach (r => {
276
+
277
+ let tr = tb.insertRow (-1);
278
+
279
+ r.forEach (c => tr.insertCell (-1).textContent = c)
280
+
281
+ });
282
+
283
+
284
+
285
+ }
286
+
287
+
288
+
289
+ handleEvent ({target: t}) {
290
+
291
+ if (t === this.prev_btn) this.add (-this.range);
292
+
293
+ if (t === this.next_btn) this.add (this.range);
294
+
295
+ }
296
+
297
+
298
+
299
+ }
300
+
301
+
302
+
303
+ this.Shedule = Shedule;
304
+
305
+ }
306
+
307
+
308
+
309
+ const BUSY = [
310
+
311
+ '2019-02-12T10:00',
312
+
313
+ '2019-02-12T10:30',
314
+
315
+ '2019-02-13T10:00',
316
+
317
+ '2019-02-02T10:00',
318
+
319
+ '2019-02-02T10:30',
320
+
321
+ '2019-02-03T10:00',
322
+
323
+ '2019-02-03T10:30',
324
+
325
+ '2019-02-09T10:00',
326
+
327
+ '2019-02-09T10:30',
328
+
329
+ '2019-02-09T23:30'
330
+
331
+ ];
332
+
333
+
334
+
335
+
336
+
337
+ let a = new Shedule (new Date, 14, BUSY), {table: b} = a;
338
+
339
+ document.querySelector ('#calendar').appendChild (b);
340
+
341
+ b.addEventListener ('click', a, false);
342
+
343
+
344
+
345
+ /*let c = new Shedule (new Date,7,BUSY), {table: d} = c;
346
+
347
+ document.querySelector ('#calendar').appendChild (d);
348
+
349
+ d.addEventListener ('click', c, false);*/
350
+
351
+
352
+
353
+ var today = new Date();
354
+
355
+ var year = today.getFullYear();
356
+
357
+ var month = today.getMonth() + 1;
358
+
359
+ var day = today.getDate();
360
+
361
+ var tds = document.querySelectorAll('td');
362
+
363
+ var yobi= new Array("日","月","火","水","木","金","土");
364
+
365
+ document.getElementById('acdn-target').value = year+'年'+month+'月'+ day+'日 '+yobi[day]+'曜日';
366
+
367
+
368
+
369
+
370
+
371
+ document.querySelector('#calendar').addEventListener('click', event => {
372
+
373
+ const target = event.target;
374
+
375
+ if (target.nodeName.toLowerCase() !== 'td') {
376
+
377
+ return true;
378
+
379
+ }
380
+
381
+ const time = target.parentNode.cells[0].textContent;
382
+
383
+ const table = target.closest('table');
384
+
385
+ const date = table.tHead.rows[1].cells[target.cellIndex - 1].textContent;
386
+
387
+
388
+
389
+ document.getElementById('acdn-target').value = year+'年'+ month + '月' + date + '日' +yobi[day]+'曜日'+ time;
390
+
391
+ return true;
392
+
393
+ }, false);
394
+
395
+ </script>
36
396
 
37
397
  ```
38
398