对于我的团队正在进行的下一个项目,我们有一个 ASP.NET/HTML 4 项目,我们正在(缓慢)升级到 MVC 4.0/HTML 5。这个设置必须在 IE 9 上工作,但我们可以由于多种原因,还没有完全升级到 HTML 5。
我要解决的问题涉及基于 jQuery:hidden
选择器切换标注的简单任务。虽然可以让标注出现,但让它隐藏给我带来了一些麻烦。
我们有一个带有以下标记的 MVC 部分:
<link rel='stylesheet' href='my-styles.css' />
<h4>Information</h4>
<div>
@Html.LabelFor(m => m.PersonName, "Person's Name")
@Html.InputFor(m => m.PersonName)
<a href='#' id='info-link'>[ ! ]</a>
</div>
<div id='info-callout' class='callout hidden'>
<div class='callout-before'></div><div class='callout-main'>
This is the name of the person this form refers to.
</div>
</div>
<script src='this-form.js'></script>
...在 this-form.js 内部:
var MyTeamCallout = function($control, $callout) {
var pub = {};
pub.$control = $control;
pub.$callout = $callout;
pub.RegisterClickEvent = function () {
pub.$control.click(function () {
e.preventDefault();
e.stopPropagation();
// Repositioning of the control removed for purposes of this post.
if(pub.$callout.is(':hidden')) {
pub.$callout.show();
}
else {
pub.$callout.hide();
}
});
}
return pub;
};
// --- Functional Code... -----------------------------------
var $link = $('#info-link'),
$callout = $('#info-callout');
$(document).ready(function () {
var calloutObject = new MyTeamCallout($link, $callout);
calloutObject.RegisterClickEvent();
});
...最后,使用给定的 CSS:
.hidden {
display: none;
}
.callout {
position: absolute;
z-index: 2;
/* Left/Top assigned by JavaScript, normally */
}
.callout-before {
position: absolute;
top: 0.5em;
left: -1em;
/* SNIP: Borders are used to create a CSS triangle. */
}
.callout-main
{
position: absolute;
top: 0;
width: 10em;
}
当我在 IE9 中运行它时,我可以使标注出现,但不会再次隐藏。我在 F12 开发人员工具中没有显示任何 JavaScript 错误。
问题::hidden
A) IE9 Quirks Mode 中
的选择器是否存在已知的兼容性问题?B) 如果是这样,克服这些限制的更好方法是什么?*
*:有问题的问题比我在这里发布的要复杂一些,但是我们当前的解决方案使用了:hidden
选择器。如果可能的话,我会尽量保留它。