回答編集履歴

5

追記3:スクリプトのミスを修正

2016/04/08 02:17

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -264,7 +264,7 @@
264
264
 
265
265
  $('#target_year').val( d.getFullYear() );
266
266
 
267
- $('#target_year')val( d.getMonth() + 1 );
267
+ $('#target_year').val( d.getMonth() + 1 );
268
268
 
269
269
  $('#target_year').val( d.getDate());
270
270
 

4

ソース内のバグを修正:追記3のOption指定部分

2016/04/08 02:17

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -250,7 +250,7 @@
250
250
 
251
251
  $('#container').datepicker({
252
252
 
253
- language : ja,
253
+ language : 'ja',
254
254
 
255
255
  clearBtn : true,
256
256
 

3

質問者コメントに対応

2016/04/08 02:15

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -176,6 +176,108 @@
176
176
 
177
177
  });
178
178
 
179
-
180
-
181
- ```
179
+ ```
180
+
181
+
182
+
183
+ ■追記3
184
+
185
+
186
+
187
+ **datepickerのオプションについて**
188
+
189
+
190
+
191
+ ■日本語化
192
+
193
+ 「language : "ja"」→有効にするために「bootstrap-datepicker.ja.js」または「bootstrap-datepicker.ja.min.js」を読み込んどく必要があります。
194
+
195
+
196
+
197
+ ■クリアボタン
198
+
199
+ 「clearBtn:true」→クリアボタンを押すと「changeDate」イベントも発生するため、選択された日付データを取得するところでnull対策をしないといけないです。
200
+
201
+
202
+
203
+ ■選択したらすぐ消滅
204
+
205
+ 「autoclose:true」→私のやり方だと設定の必要がありません。勝手に「hide」メソッド呼んでるので。
206
+
207
+
208
+
209
+ ■表示が左上になる
210
+
211
+ 「container:表示位置の基準要素」→どちらかというとstylesheetの設定の問題。
212
+
213
+
214
+
215
+
216
+
217
+ で、html部を再掲
218
+
219
+
220
+
221
+
222
+
223
+ ```
224
+
225
+ <input type="text" id="target_year" name="target_year" size="4" maxlength="4" class="inp" value="" />年
226
+
227
+ <input type="text" id="target_month" name="target_month" size="2" maxlength="2" class="inp" value="" />月
228
+
229
+ <input type="text" id="target_day" name="target_day" size="2" maxlength="2" class="inp" value="" />日
230
+
231
+ <input type="button" id="dp_pos1" name="dp_pos1" value="日付選択" />
232
+
233
+ <input type='hidden' id='container' />
234
+
235
+ </tbody>
236
+
237
+ </table>
238
+
239
+ <div id='dpbody' style='position:absolute;left:200px'></div>
240
+
241
+ ```
242
+
243
+
244
+
245
+ 次にjavascript(一部)
246
+
247
+
248
+
249
+ ```
250
+
251
+ $('#container').datepicker({
252
+
253
+ language : ja,
254
+
255
+ clearBtn : true,
256
+
257
+ container : '#dpbody'
258
+
259
+ }).on('changeDate', function(){
260
+
261
+ if(e.date){
262
+
263
+ var d = e.date;
264
+
265
+ $('#target_year').val( d.getFullYear() );
266
+
267
+ $('#target_year')val( d.getMonth() + 1 );
268
+
269
+ $('#target_year').val( d.getDate());
270
+
271
+ }
272
+
273
+ $(this).datepicker('hide')
274
+
275
+ });
276
+
277
+ $('#dp_pos1').on('click', function(){ $('#container').datepicker('show'); });
278
+
279
+ ```
280
+
281
+
282
+
283
+ 。。。さあ、これでどや。

2

全体像を追加

2016/04/07 09:10

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -105,3 +105,77 @@
105
105
 
106
106
 
107
107
  ```
108
+
109
+
110
+
111
+ ■追記2:
112
+
113
+ 最終的にこれくらいにしとけば変更に耐えやすいかな。
114
+
115
+ ```
116
+
117
+ $(function(){
118
+
119
+
120
+
121
+ var dpinit = function(dp, year, mon, day, d){
122
+
123
+
124
+
125
+ var _get = function(elm){ return elm.datepicker('getDate'); }
126
+
127
+ var _set = function(elm, val){ elm.datepicker('setDate', val); return elm; }
128
+
129
+
130
+
131
+ dp.datepicker().on('changeDate', function(e) {
132
+
133
+ year.val( (d =e.date).getFullYear() );
134
+
135
+ mon.val( d.getMonth() + 1 );
136
+
137
+ day.val( d.getDate());
138
+
139
+ $(this).datepicker('hide')
140
+
141
+ });
142
+
143
+
144
+
145
+ $('#dp_pos1').on('click', function(){ dp.datepicker('show'); });
146
+
147
+
148
+
149
+ year.on('change', function(){
150
+
151
+ (d =_get(dp)).setFullYear($(this).val());
152
+
153
+ _set(dp, d);
154
+
155
+ });
156
+
157
+ mon.on('change', function(){
158
+
159
+ (d =_get(dp)).setMonth($(this).val() - 1);
160
+
161
+ _set(dp, d);
162
+
163
+ });
164
+
165
+ day.on('change', function(){
166
+
167
+ (d =_get(dp)).setDate($(this).val());
168
+
169
+ _set(dp, d);
170
+
171
+ });
172
+
173
+ };
174
+
175
+ dpinit($('#container'), $('#target_year'), $('#target_month'), $('#target_day'));
176
+
177
+ });
178
+
179
+
180
+
181
+ ```

1

datepicker<=>inputタグの相互値連動処理を追加。

2016/04/07 07:55

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -53,3 +53,55 @@
53
53
 
54
54
 
55
55
  もともと入力欄とセットで使うのが目的のものなので今回の質問者さんの使用法はおそらく想定外のものだったのではないかと。
56
+
57
+
58
+
59
+
60
+
61
+ ■追記:
62
+
63
+ datepicker→各inputタグの値渡しはできてるけどその逆がないので追加。
64
+
65
+
66
+
67
+ ```
68
+
69
+ var r = function(dp){
70
+
71
+ $('#target_year').on('change', function(){
72
+
73
+ var d =dp.datepicker('getDate');
74
+
75
+ d.setFullYear($(this).val());
76
+
77
+ dp.datepicker('setDate', d);
78
+
79
+ });
80
+
81
+ $('#target_month').on('change', function(){
82
+
83
+ var d = dp.datepicker('getDate');
84
+
85
+ d.setMonth($(this).val() - 1);
86
+
87
+ dp.datepicker('setDate', d);
88
+
89
+ });
90
+
91
+ $('#target_day').on('change', function(){
92
+
93
+ var d = dp.datepicker('getDate');
94
+
95
+ d.setDate($(this).val());
96
+
97
+ dp.datepicker('setDate', d);
98
+
99
+ });
100
+
101
+ };
102
+
103
+ r($('#container'));
104
+
105
+
106
+
107
+ ```