Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Jquery-Resizable-Columnsでテーブルが読み込めない

解決したいこと

Jquery-Resizable-Columnsを実装し、テーブルの列幅をマウスのドラッグで可変できるようにしたい
ただ、テーブルの中身が0とカウントされてしまいドラッグ出来ない
正常なテーブルの中身の数を取得できるようにしたい。

jqueryの中で、テーブルの数が0となってしまう原因を突き止めたいがなぜか分からない

該当するソースコード

<div class="sub">
                <div class="sub_contents">
                    <div class="message_area04">合計: <?php echo $searchCountView ?></div>
                    <div class="list_area">
                        <?php
                        if (is_array($arrList) && count($arrList) > 0) {
                            foreach ($arrList as $rowCnt => $arrRow) {
                                // 見出し開始
                                if ($rowCnt == 0) {
                                    // echo "<div class=\"table_h\" style=\"width: " . $headWidth . "px;\">";
                                    echo "<table class=\"list_table_h\" style=\"width: 800px; table-layout: fixed;\">";
                                    echo "<thead>";
                                }
                                // データ開始
                                if ($rowCnt == 1) {
                                    // echo "<div class=\"table_b\" style=\"width: " . $dataWidth . "px; height: 100%;\" >";
                                    echo "<table class=\"list_table_b\" style=\"width: 800px; table-layout: fixed;\">";
                                    echo "</tbody>";
                                }

                                echo "<tr>";
                                foreach ($arrRow as $colCnt => $colData) {
                                    if ($rowCnt == 0) {
                                        echo "<th class=\"hd" . $colCnt . "\">" . $colData . "</th>";
                                    } else {
                                        // iReport起動
                                        if (
                                            $colCnt == 0 && $arrAccNos[$rowCnt] != ""
                                            && defined('RESULT_LIST_NO') && RESULT_LIST_NO === TRUE
                                            && defined('RESULT_REPORT_FORMEDIT') && RESULT_REPORT_FORMEDIT === TRUE
                                        ) {
                                            $uid = $_DM->getUserID();
                                            $linkURL  = "../co/urlcall.php";
                                            $linkURL .= "?UserID=" . $uid . "&AccessionNo=" . $arrAccNos[$rowCnt];
                                            echo "<td class=\"bd" . $colCnt . "\"><a href=\"" . $linkURL . "\" target=\"_blank\">" . $colData . "</td>";
                                        } else {
                                            echo "<td class=\"bd" . $colCnt . "\">" . $colData . "</td>";
                                        }
                                    }
                                }
                                echo "</tr>";

                                // 見出し終了
                                if ($rowCnt == 0) {
                                    echo "</thead>";
                                    echo "</table>";
                                    // echo "</div>";
                                }
                                // データ終了
                                if ($rowCnt != 0 && $rowCnt == count($arrList) - 1) {
                                    echo "</tbody>";
                                    echo "</table>";
                                    // echo "</div>";
                                }
                            }
                        } else if ($queryErrMsg != '') {
                            // クエリエラーメッセージ出力
                            echo "<span class=\"error_message_area01\">" . $queryErrMsg . "</span>";
                        } else {
                            // 検索条件超過エラーメッセージ出力
                            echo "エラー";
                        }
                        ?>
                    </div>
<link rel="stylesheet" href="dist/jquery.resizableColumns.css">
    <script src="jquery-1.10.2.min.js"></script>
    <script src="dist/jquery.resizableColumns.min.js"></script>

    <script>
        $(function() {
            $("table").resizableColumns({
                // store: window.store
            });
        });
    </script>

本来であれば、テーブルの内容に合わせて以下のように
class名、rc-handle-containerとrc-handleが生成される

生成される内容
<div class="rc-handle-container" style="width: 500px;">

<div class="rc-handle" style="left: 128.609px; height: 30px;"></div>
<div class="rc-handle" style="left: 58px; height: 30px;"></div>
<div class="rc-handle" style="left: 221.484px; height: 30px;"></div>
<div class="rc-handle" style="left: 357.297px; height: 30px;"></div>

</div>

テーブルの内容
<table>
    <thead>
        <tr>
            <th style="width: 19.81%;" class="0">#</th>
            <th style="width: 24.71%;" class="1">#</th>
            <th style="width: 32.81%;" class="2">#</th>
            <th style="width: 48.84%;" class="3">#</th>
            <th style="width: 50.4%;" class="4">#</th>
        </tr>
    </thead>
</table>

今回のケースでは、rc-handle-containerは生成されているが、rc-handleがテーブルの数分生成されず以下のみとなっている

<div class="rc-handle-container" style="width: 800px;"></div>

自分で試したこと

Jqueryの処理が実行されていることはわかっているので、
どこかで処理が止まってしまっているかを、alert設定し確認した

→ 5.6.7.8の処理が実行されなかった。

  Creates dummy handle elements for all table header columns
  	@method createHandles
  **/
		value: function createHandles() {
			alert("1の処理");
			var _this = this;

			var ref = this.$handleContainer;
			if (ref != null) {
				ref.remove();
			}

			this.$handleContainer = $('<div class=\'aaaaaaaa' + _constants.CLASS_HANDLE_CONTAINER + '\' />');
			this.$table.before(this.$handleContainer);

			alert("2の処理");
			// alert($next.length);
			// alert($current.is(_constants.SELECTOR_UNRESIZABLE));
			// alert($next.is(_constants.SELECTOR_UNRESIZABLE));

			this.$tableHeaders.each(function (i, el) {
				alert("5の処理");
				var $current = _this.$tableHeaders.eq(i);
				var $next = _this.$tableHeaders.eq(i + 1);
				alert("6の処理");

				if ($next.length === 0 || $current.is(_constants.SELECTOR_UNRESIZABLE) || $next.is(_constants.SELECTOR_UNRESIZABLE)) {
					alert("3の処理");
					return;

				}
				alert("4の処理");
				var $handle = $('<div class=\'' + _constants.CLASS_HANDLE + '\' />').data(_constants.DATA_TH, $(el)).appendTo(_this.$handleContainer);
			});

			alert("7の処理");

			this.bindEvents(this.$handleContainer, ['mousedown', 'touchstart'], '.' + _constants.CLASS_HANDLE, this.onPointerDown.bind(this));
		}
	}, {
		key: 'assignPercentageWidths',

		/**

以下で、$tableHeadersに値を設置する処理があった。
$tableHeadersの値を確認したところ、0だった。

  	@method refreshHeaders
  **/
		value: function refreshHeaders() {
			// Allow the selector to be both a regular selctor string as well as
			// a dynamic callback
			var selector = this.options.selector;
			if (typeof selector === 'function') {
				alert("8の処理");
				selector = selector.call(this, this.$table);
			}
			alert("9の処理");

			this.$tableHeaders = this.$table.find(selector);

			alert(this.$tableHeaders.length.toString());

			// Assign percentage widths first, then create drag handles
			this.assignPercentageWidths();
			this.createHandles();
		}
	}, {
		key: 'createHandles',

		/**
var ResizableColumns = (function () {
	function ResizableColumns($table, options) {
		alert("ResizableColumnsの処理");
		_classCallCheck(this, ResizableColumns);

		this.ns = '.rc' + this.count++;

		this.options = $.extend({}, ResizableColumns.defaults, options);

		this.$window = $(window);
		this.$ownerDocument = $($table[0].ownerDocument);
		this.$table = $table;

		this.refreshHeaders();
		this.restoreColumnWidths();
		this.syncHandleWidths();

		this.bindEvents(this.$window, 'resize', this.syncHandleWidths.bind(this));

		if (this.options.start) {
			this.bindEvents(this.$table, _constants.EVENT_RESIZE_START, this.options.start);
		}
		if (this.options.resize) {
			this.bindEvents(this.$table, _constants.EVENT_RESIZE, this.options.resize);
		}
		if (this.options.stop) {
			this.bindEvents(this.$table, _constants.EVENT_RESIZE_STOP, this.options.stop);
		}
	}

	_createClass(ResizableColumns, [{
		key: 'refreshHeaders',

		/**
0

1Answer

自己解決出来た

今回作成している、画面では、
Jqueryのfadein()fadeout()を使用していた

fadeinで、読み込み終了後に対象テーブルを読み込んでいるためテーブルの数がカウントされていないと思われる。
細かく見ていないが、正常に動作しているテスト版に、fadein,fadeout処理を追加したところ同様にテーブルのカウントが0になった、

対処方法は、fadein,outの処理を変えるしかなさそう

もう少し見てみる

0Like

Your answer might help someone💌