Автор оригинала: alexhemp
Сделай тупо
- там где показываешь слой добавь WCH.Apply
там где прячешь WCH.Discard
Как я и думал - ларчик открывался просто, по крайней мере не так, как у господ из WCH. Ниже привожу код для слоеного меню, просто некогда было его очищать под болванку для всего
// METHOD ONE: IE5.5+ SELECT BOX FIX
// This will allow the menus to display over SELECT boxes in IE5.5+ browsers.
// It will do nothing for NS4 or IE5.0 and earlier.
// To activate: paste this afte your menu data (either in the POP_DATA file, or your frameset)
// and then make sure you call IE55SelectBoxFix() for all your menu objects you want fixed.
function IE55SelectBoxFix(menuObj) { with (menuObj)
{
if (window.createPopup) for (var mN in menu) with (menu[mN][0])
{
extraHTML += '<iframe src="about:blank" style="position: absolute; left: 0px; top: 0px; width: ' +
menuW + 'px; height: ' + menuH + 'px; z-index: 0; border: none; ' +
'filter: progid
XImageTransform.Microsoft.Alpha(style=0,opacity=0)"></iframe>';
}
}};
IE55SelectBoxFix(pMenu);
// METHOD TWO: DYNAMIC SHOW AND HIDE
// This can hide any element, like applets, movies and IFRAMEs, and it is more complicated
.
// To activate: Paste this into your menu data file (either POP_DATA or the frameset).
// This must be near the end of the file, after your menu animation settings in particular.
// It will automatically apply itself to all menus in that page.
// This function will have no effect on NS4's form behaviour.
PopupMenu.prototype.elementHide = function(mN, show)
{
var hideTags = [];
// <select> is hidden in all IE versions, and Opera < 7.0.
if ((isIE && !isOp) || (isOp && !document.documentElement))
hideTags[hideTags.length] = 'SELECT';
// <iframe> is hidden in IE < 5.5, all Opera versions, and Mozilla < 1.0.
if ((isIE && !isOp && !window.createPopup) || isOp ||
navigator.userAgent.match('rv:0.')) hideTags[hideTags.length] = 'IFRAME';
// <object> and <applet> are hidden in all browsers.
hideTags[hideTags.length] = 'OBJECT';
hideTags[hideTags.length] = 'APPLET';
with (this.menu[mN][0])
{
if (!lyr || !lyr.ref) return;
var oldFn = show ? 'ehShow' : 'ehHide';
if (this[oldFn]) this[oldFn](mN);
else this.menu[mN][0].lyr.vis(show ? 'visible' : 'hidden');
if (!isDOM && !isIE) return;
if (hideTags.length == -1) return;
var w = par?eval(par):self;
if (!w.hideElms) w.hideElms = [];
var hE = w.hideElms;
if (show)
{
var elms = [];
for (var t = 0; t < hideTags.length; t++)
{
var tags = isDOM ? w.document.getElementsByTagName(hideTags[t]) :
isIE ? w.document.all.tags(hideTags[t]) : null;
for (var i = 0; i < tags.length; i++) elms[elms.length] = tags
;
}
for (var eN = 0; eN < elms.length; eN++)
{
var eRef = elms[eN];
with (w.page.elmPos(eRef)) var eX = x, eY = y;
if (!(lyr.x()+menuW<eX || lyr.x()>eX+eRef.offsetWidth) &&
!(lyr.y()+menuH<eY || lyr.y()>eY+eRef.offsetHeight))
{
if (!hE[eN]) hE[eN] = { ref: eRef, menus: [] };
hE[eN].menus[mN] = true;
eRef.style.visibility = 'hidden';
}
}
}
else for (var eN in hE)
{
var reShow = 1, eD = hE[eN];
eD.menus[mN] = false;
for (var eM in eD.menus) reShow &= !eD.menus[eM];
if (reShow && eD.ref)
{
eD.ref.style.visibility = 'visible';
delete hE[eN];
}
}
}
return;
}
for (var p in PopupMenu.list)
{
var pm = PopupMenu.list[p];
pm.ehShow = pm.showMenu;
pm.showMenu = new Function('mN','this.elementHide(mN, true)');
pm.ehHide = pm.hideMenu;
pm.hideMenu = new Function('mN','this.elementHide(mN, false)');
}
Для меня тема закрыта, потому что все летает. Кстати, в отличие от WCH, если select убрать в iframe, то работает первый метод - 5 строк скрипта(!)