今後のプロジェクトで取り組んでいることの 1 つは、コールアウト/ツールチップ システムです。理論的には、それは簡単なことです。次のようなマークアップを使用します。
<script src='jQuery 1.10.1'></script>
<a href='#' id='callout-link'>Click Me</a>
<div id='callout-id' class='callout hidden'>
This is my tooltip text.
</div>
/* CSS Styling... */
.callout {
position: absolute;
z-index: 2;
}
.hidden {
display: none;
}
...そして JavaScript でバインドして、リンクをクリックするたびに表示を切り替えるようにします。
// ...Page Script...
var $link = $('#callout-link'),
$callout = $('#callout-id');
$(document).ready(function () {
var callout = new MyCallout($link, $callout);
callout.bindToControlClick();
});
// ...Object Definition...
var MyCallout = function ($control, $callout) {
init();
// Public Scope...
var pub = {};
pub.$actionControl = $control;
pub.$callout = $callout;
pub.bindToControlClick = function () {
pub.$actionControl.click(function (e) {
e.preventDefault();
e.stopPropagation();
toggleCallout();
});
}
// Private Scope...
function init() {
// The callout-content subdiv is necessary for other operations that are
// likely not relevant to the problem I am encountering.
if($callout.children('.callout-content').length == 0)
$callout.wrapInner('<div class="callout-content" />');
}
function toggleCallout() {
if(pub.$callout.is(':hidden')) {
// Show is actually more complicated than this, but that's not the problem.
pub.$callout.show();
} else {
pub.$callout.hide();
}
}
return pub;
};
問題は、吹き出しが最初はビューから非表示になっていて、クリックすると表示されるときに、吹き出しをオフに切り替えようとすると失敗することです。の Chrome デバッガーでブレークポイントとウォッチ値を追加すると$callout.is(':hidden')
、要素が表示されていても、ウォッチ値は と評価されtrue
ます。
:hidden セレクターの jQuery のエントリに基づいて、特定の時点で多数のプロパティがチェックされているように見えます。これにより、次の質問:hidden
に至ります。たとえそうでなくなったとしても、隠されるべきですか?
編集: サイド パネルで私の最近の質問に気付いたので、私のチームはアプリが IE9 標準モードで実行されていることを確認したので、今回は環境が問題になることはありません。
編集 2:問題のあるコードのフィドル(更新! 問題は完全に再現されています。)