回答編集履歴

8

リンク

2018/03/14 04:50

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -400,7 +400,7 @@
400
400
 
401
401
  - jQueryは削られた機能の関係からこのバージョン(1.4.3)を利用する
402
402
 
403
-  このスクロールプラグインで利用している[msie指定が1.9から使えなくなった](jquery msie)
403
+  このスクロールプラグインで利用している[msie指定が1.9から使えなくなった](https://www.google.co.jp/search?q=jquery+msie&oq=jquery+msie&aqs=chrome.0.69i59j0l5.6927j0j4&sourceid=chrome&ie=UTF-8)
404
404
 
405
405
  - $.postは非同期で実行しているためHTML構築時ではテーブルは存在しない。
406
406
 

7

ミニマムサンプルコード

2018/03/14 04:50

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -233,3 +233,175 @@
233
233
 
234
234
 
235
235
  ちょこちょこ目の前のエラーを直すのではなく、必要な機能だけを単体でしっかり作って確認ができてからやっていった方が確実ですし、本質的なところから理解することができます。
236
+
237
+
238
+
239
+ # ミニマムサンプルコード
240
+
241
+
242
+
243
+ 本来、最初に作るべきは下記のようなミニマム構成のコードです。
244
+
245
+ おそらくある程度作ったものに対して後からこのプラグインを入れようとしたのもあり、
246
+
247
+ 元々あったコードもあるかとは思いますが、必ず最小構成で、何の干渉もない状態のもので試した後に、
248
+
249
+ 本来のコードに埋め込むようにしていくのが、何よりの近道です。
250
+
251
+
252
+
253
+ ※動作確認はしてあります。が幅や見栄えなどは別途調整が必要です。
254
+
255
+ ```html
256
+
257
+ <!DOCTYPE html>
258
+
259
+ <html>
260
+
261
+ <head>
262
+
263
+ <meta charset="UTF-8">
264
+
265
+ <title>test(json→tbodyscroll)</title>
266
+
267
+ </head>
268
+
269
+ <body>
270
+
271
+ <button type="button">生成</button>
272
+
273
+ <div id="tbldata"></div>
274
+
275
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
276
+
277
+ <script src="./js/jquery.tbodyscroll.js"></script>
278
+
279
+ <script>
280
+
281
+ $(function() {
282
+
283
+ $("button").click(function(){
284
+
285
+ //リスト表示
286
+
287
+ $.post(
288
+
289
+ "./m.php"
290
+
291
+ , function(data) {
292
+
293
+ $('[id=tbldata]').html(data.text);
294
+
295
+ $("#tbl_list").tbodyScroll({thead_height:"30px",tbody_height:"100px",head_bgcolor: "transparent",foot_bgcolor: "transparent"});
296
+
297
+ },
298
+
299
+ "json"
300
+
301
+ );
302
+
303
+ });
304
+
305
+ });
306
+
307
+ </script>
308
+
309
+ </body>
310
+
311
+ </html>
312
+
313
+ ```
314
+
315
+ m.php
316
+
317
+ ```php
318
+
319
+ <?php
320
+
321
+
322
+
323
+ $strHTML = <<<EOF
324
+
325
+ <table id="tbl_list">
326
+
327
+ <thead>
328
+
329
+ <tr>
330
+
331
+ <th><input type="checkbox" name="btn_on_check" id="btn_on_check" value="all" ></th>
332
+
333
+ <th>備品<br>タイプ</th>
334
+
335
+ <th>備品名</th>
336
+
337
+ </tr>
338
+
339
+ </thead>
340
+
341
+ <tbody>
342
+
343
+ EOF;
344
+
345
+
346
+
347
+ for($i=1;$i<=100;$i++){
348
+
349
+ $strHTML .= <<<EOF
350
+
351
+ <tr>
352
+
353
+ <td>ステータス{$i}</td>
354
+
355
+ <td>No.{$i}</td>
356
+
357
+ <td>備品名{$i}</td>
358
+
359
+ </tr>
360
+
361
+ EOF;
362
+
363
+ }
364
+
365
+
366
+
367
+ $strHTML .= <<<EOF
368
+
369
+ </tbody>
370
+
371
+ </table>
372
+
373
+ EOF;
374
+
375
+ $output = array (
376
+
377
+ 'total_page' => 100,
378
+
379
+ 'text' => $strHTML
380
+
381
+ );
382
+
383
+
384
+
385
+ echo json_encode($output);
386
+
387
+ ```
388
+
389
+
390
+
391
+ ポイント:
392
+
393
+ - PHPでエラーは起こさない(超大前提)
394
+
395
+ - json返す側は必要なhtmlだけ返す(tableのみ)
396
+
397
+ - jsonで返しているので、jsonで受け取るようにする
398
+
399
+  evalJSONなくても[$.postの引数でjson](http://js.studio-kingdom.com/jquery/ajax/post)を指定すれば取れます。
400
+
401
+ - jQueryは削られた機能の関係からこのバージョン(1.4.3)を利用する
402
+
403
+  このスクロールプラグインで利用している[msie指定が1.9から使えなくなった](jquery msie)
404
+
405
+ - $.postは非同期で実行しているためHTML構築時ではテーブルは存在しない。
406
+
407
+  存在しないタイミングでプラグインを呼び出しては効果がないので、テーブルがhtml上に現れた後にプラグインをそのテーブルに対して行う

6

調整

2018/03/14 04:48

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -190,7 +190,15 @@
190
190
 
191
191
  ```
192
192
 
193
-
193
+ となると  class="demo" は不要ですね。
194
+
195
+ 前回質問で「※demoの部分は任意の名前なので変更しても良いですがその場合はtableに記述する名前も同じにしてください」と書いた部分です。
196
+
197
+ ```html
198
+
199
+ <table id="tbl_list">
200
+
201
+ ```
194
202
 
195
203
  # 他に考えられる要因(あくまで可能性のレベル)
196
204
 

5

追記

2018/03/14 01:24

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -178,6 +178,18 @@
178
178
 
179
179
  ```
180
180
 
181
+ tableにtbl_listというIDつけているのでdemoという明らかにテストっぽいのではなくIDあてたほうがいいんじゃないかなあ。
182
+
183
+ ```javascript
184
+
185
+ $(document).ready(function() {
186
+
187
+ $("#tbl_list").tbodyScroll({thead_height:"30px",tbody_height:"100px",head_bgcolor: "transparent",foot_bgcolor: "transparent"});
188
+
189
+ });
190
+
191
+ ```
192
+
181
193
 
182
194
 
183
195
  # 他に考えられる要因(あくまで可能性のレベル)

4

修正

2018/03/14 01:20

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  $strHTML = <<<'eof'
94
94
 
95
- <table id="tbl_list" cellspacing="0" cellpadding="0" class="demo">
95
+ <table id="tbl_list" class="demo">
96
96
 
97
97
  <thead>
98
98
 
@@ -112,6 +112,8 @@
112
112
 
113
113
  //↑提示のソースはそのままPHP関数が埋め込んであったので少し修正しています。
114
114
 
115
+ // 何度か指摘していますがtableに入れているcellspacing="0" cellpadding="0" は不要かと。CSSで調整してください。
116
+
115
117
 
116
118
 
117
119
  ~~~中間部分は省略しています(kei344さん指摘の部分はきちんと直してください)

3

修正

2018/03/14 01:19

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -74,7 +74,11 @@
74
74
 
75
75
 
76
76
 
77
- つまりJSONを渡す側は下記だけ返せ良い。
77
+ つまりJSONを渡す側は下記のように書いて、上記簡略化ソースで言え
78
+
79
+ <table></table>に該当する部分だけを返すようにすれば良いです。
80
+
81
+
78
82
 
79
83
  ```php
80
84
 

2

修正

2018/03/14 01:17

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -22,10 +22,12 @@
22
22
 
23
23
  つまり、<html><head>~~~</head><body>XXXXX</body></html>のXXXXXの部分だけ書けば良い。
24
24
 
25
-  入れてしまうと以下のようなHTML(省略)が出力されてしまい、HTMLとしておかしい。
25
+  入れてしまうと以下のようなHTMLが出力されてしまい、HTMLとしておかしい。
26
26
 
27
27
   正しくHTMLが組まれていないので、弊害が起きる可能性もあります。
28
28
 
29
+ ※簡略化しています
30
+
29
31
  ```HTML
30
32
 
31
33
  <html>

1

修正

2018/03/14 01:13

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -72,6 +72,76 @@
72
72
 
73
73
 
74
74
 
75
+ つまりJSONを渡す側は下記だけ返せば良い。
76
+
77
+ ```php
78
+
79
+ ~~DB接続・取得部分は省略しています
80
+
81
+
82
+
83
+ //ヘッダー部
84
+
85
+ $sort_keisokuki_img = _hs($sort_keisokuki_img);
86
+
87
+ $strHTML = <<<'eof'
88
+
89
+ <table id="tbl_list" cellspacing="0" cellpadding="0" class="demo">
90
+
91
+ <thead>
92
+
93
+ <tr>
94
+
95
+ <th scope="col" class="f-weight"><input type="checkbox" name="btn_on_check" id="btn_on_check" value="all" ></th>
96
+
97
+ <th scope="col" class="f-weight">備品<br>タイプ</th>
98
+
99
+ <th scope="col" class="f-weight"><a href="#" id="sort" name="keisokuki" param="{$sort_keisokuki_img}">備品名</a></th>
100
+
101
+ </tr>
102
+
103
+ </thead>
104
+
105
+ eof;
106
+
107
+ //↑提示のソースはそのままPHP関数が埋め込んであったので少し修正しています。
108
+
109
+
110
+
111
+ ~~~中間部分は省略しています(kei344さん指摘の部分はきちんと直してください)
112
+
113
+
114
+
115
+ $strHTML .= <<<'eof'
116
+
117
+ </tbody>
118
+
119
+ </table>
120
+
121
+ eof;
122
+
123
+ //↑提示のソースには</html>がありましたがこれは不要なので除外
124
+
125
+
126
+
127
+ $output = array (
128
+
129
+ 'total_page' => ceil($datanum / $page_disp_kensu),
130
+
131
+ 'text' => $strHTML
132
+
133
+ );
134
+
135
+
136
+
137
+ echo json_encode($output);
138
+
139
+
140
+
141
+ ```
142
+
143
+
144
+
75
145
  実際にJavaScriptなりCSSなりが効いて動作を行うのは呼び出しもとであるichiran.php側で行われるべき。
76
146
 
77
147
  つまり下記はichiran.phpに書く。
@@ -110,7 +180,7 @@
110
180
 
111
181
   導入したいプラグインはどちらのバージョンが対応しているか確認して統一すべき
112
182
 
113
- - 親に様々なjQueryプラグインが読み込まれている、干渉しあっている可能性がある。
183
+ - 親に様々なjQueryプラグインが読み込まれているので、干渉しあっている可能性がある。
114
184
 
115
185
   ブラウザの開発ツールのコンソールでエラー出てませんか?
116
186