У меня есть следующий унаследованный код, создающий всплывающее окно «автозаполнение» под входом формы с использованием результатов, возвращаемых вызовом AJAX.Этот код отлично работает в Firefox 6 и IE9 - он показывает небольшой div (стиль - это то, что Chrome показывает в инструментах разработчика):
<div id="theDiv" style="position: absolute; left: 0px; top: 21px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: green; border-right-color: green; border-bottom-color: green; border-left-color: green; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-image: initial; background-color: white; z-index: 1; visibility: hidden; "><div style="visibility: visible; ">[...autocomplete text here...]</div></div>
Я вижу это <div>
в FF и IE, но Chromeотображает <div>
, который кажется свернутым до его границ.Как ни странно, если я установил точку останова с помощью Инструментов разработчика в приведенном ниже коде JavaScript в строке this.oDiv.style.visibility = "visible";
, Chrome создаст <div>
и покажет его с размером свернутого до границ, но если я переключусь на вкладку Элементыв Инструментах разработчика, чтобы попытаться понять почему, кажется, что Chrome что-то пересчитывает, и мой <div>
внезапно появляется и отображается правильно.Если я обновлюсь, все снова сломается.
Это ошибка Chrome или что-то не так с моим кодом?
Соответствующий код:
AutoComplete.prototype.onchange = function()
{
// clear the popup-div.
while ( this.oDiv.hasChildNodes() )
this.oDiv.removeChild(this.oDiv.firstChild);
// get all the matching strings from the AutoCompleteDB
var aStr = new Array();
this.db.getStrings("", "", aStr);
// add each string to the popup-div
var i, n = aStr.length;
for ( i = 0; i < n; i++ )
{
var iDiv = document.createElement('div');
var myText = document.createTextNode(aStr[i]);
iDiv.appendChild(myText);
iDiv.FormName = this.FormName;
iDiv.onmousedown = AutoComplete.prototype.onDivMouseDown;
iDiv.onmouseover = AutoComplete.prototype.onDivMouseOver;
iDiv.onmouseout = AutoComplete.prototype.onDivMouseOut;
iDiv.AutoComplete = this;
iDiv.style.visibility = "visible";
this.oDiv.appendChild(iDiv);
}
this.oDiv.style.visibility = "visible";
}