編集:(以下の回答を参照)
私は長い間スタックオーバーフローの視聴者でしたが、どこにも答えが見つからなかったので、今日の最初の質問です... JavaScriptコードで奇妙な動作をしています。私は多くの異なる方法を試しましたが、問題を修正することはできませんでした。私が望むのは、ボタンをクリックしたときにいくつかの要素を折りたたんで展開することです...通常は単純で、Chromeでは機能しますが、IE8では機能しません。
- エラーメッセージはありません
- 彼はループに入りましたが、クラスまたは私の要素へのトグルを持っていませんでした。
ここに私のJavaScriptコードがあります:
function collapseClick(obj) { var group = $(obj).attr('data-maingroup'); console.log("collapseClick on group:" + group); console.log("obj class before:" + $(obj).attr('class')); if ($(obj).hasClass("toggleExpand")) { $(obj).addClass("toggleMinus"); $(obj).removeClass("toggleExpand"); } else { $(obj).removeClass("toggleMinus"); $(obj).addClass("toggleExpand"); } console.log("obj class after:" + $(obj).attr('class')); $('div[data-group="' + group + '"]').each(function (index, item) { console.log("div loop for group:" + group + " index:" + index); $(this).toggle(); });
}
レンダリングされる私のHtmlは次のとおりです。
<div id="chart">
<div class="leftPart">
<div class="header">name</div>
<div class="item parent">
<a id="collapse_Integrated_Planning" onclick="collapseClick(this);return false;" style="float:left;" class="leftcollapse toggleMinus" data-maingroup="Integrated Planning"></a>Integrated Planning
</div>
<div class="item child gantShow" data-group="Integrated Planning">John Smith</div>
<div class="item child gantShow" data-group="Integrated Planning">Alex Smith</div>
</div>
<div class="gantMainControl" id="gantControl">
<div class="header">
<div class="headerRow">
<div class="headerRowYear" id="headerYear">
<div class="headerCellYear" style="width:1499.5983985355874px">2013</div>
</div>
</div>
<div class="headerRow">
<div class="headerCellMonth" style="width:126.42890508110469px">January</div>
<div class="headerCellMonth" style="width:114.1938497506752px">February</div>
<div class="headerCellMonth" style="width:126.42890508110469px">March</div>
<div class="headerCellMonth" style="width:122.35055330429486px">April</div><div class="headerCellMonth" style="width:126.42890508110469px">May</div>
<div class="headerCellMonth" style="width:122.35055330429486px">June</div>
<div class="headerCellMonth" style="width:126.42890508110469px">July</div><div class="headerCellMonth" style="width:126.42890508110469px">August</div>
<div class="headerCellMonth" style="width:122.35055330429486px">September</div>
<div class="headerCellMonth" style="width:126.42890508110469px">October</div>
<div class="headerCellMonth" style="width:122.35055330429486px">November</div>
<div class="headerCellMonth" style="width:126.42890508110469px">December</div>
</div>
</div>
<div class="container">
<div class="timelineContainer" style="width: 1503px;"></div>
</div>
<div class="container gantShow" data-group="Integrated Planning">
<div class="timelineContainer child" style="width: 1503px;">
<div class="timeline" style="width:722.9598440425635px;margin-left:772.560202716214px" title="2013/07/08 - 2013/12/31<br></div>Integrated Planning" onclick="onTimelineClick(this)" data-id="159c5c97-c135-4906-970c-e4d58f647c41" data-startdate="2013/07/08">100%</div>
</div>
</div>
<div class="container gantShow" data-group="Integrated Planning">
<div class="timelineContainer child" style="width: 1503px;">
<div class="timeline" style="width:949.2691917671041px;margin-left:546.2508549916735px" title="2013/05/14 - 2013/12/31<br></div>Integrated Planning" onclick="onTimelineClick(this)" data-id="5c3756b1-0674-4bfc-b6ce-fa765db63eed" data-startdate="2013/05/14">100%</div>
</div>
</div>
ここに私のコンソールログがあります:
LOG: collapseClick on group:Integrated Planning
LOG: obj class before:leftcollapse toggleMinus
LOG: obj class after:leftcollapse toggleExpand
LOG: group の div loop:Integrated Planning index:0
LOG: div loop for group:Integrated Planning index:1
LOG:グループの div ループ: 統合計画 index:2
ログ: グループの div ループ: 統合計画 index:3
このIE8の問題が私を悩ませ始めたので、本当に助けが必要です...
回答:
私の質問に対する答えが見つかりました。
この問題は、chrome と IE がサイズ変更イベントを処理する方法に関連していました。
ブラウザのサイズ変更時に呼び出される別の JavaScript 関数がありました (
$(window).resize(function () {
console.log("resize");
config.zoomLevel = ($(window).width() - 200) / 421.739; //magic formula to know how many pixel is entering in the screen for the chart.
createGantControl(('#' + mainControlId), config);
});
)。
この関数は私のグラフを再生成していました。
- css 値を変更すると、Chrome はサイズ変更イベントを呼び出しません。
- しかし、IEでcss値を変更すると、IEはサイズ変更をリコールするため、グラフは常に再レンダリングされました。
将来的に役立つことを願っています!
-ジェフ