我有以下遺留代碼,使用從AJAX調用返回的結果在表單輸入下創建彈出式「自動完成」框。此代碼在Firefox 6和IE9正常工作 - 它會彈出一個小格(造型就是Chrome會顯示在開發者工具):Chrome無法正確顯示Javascript createElement div?
<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>
我可以在FF和IE瀏覽器看到這個<div>
,但瀏覽器就會顯示一個<div>
那似乎已經倒塌到了邊界。奇怪的是,如果我在this.oDiv.style.visibility = "visible";
行的javascript代碼中使用開發人員工具設置了斷點,則Chrome會創建<div>
並將其顯示爲向下摺疊到邊框的大小,但如果切換到開發人員工具中的元素選項卡以試着看看爲什麼,Chrome似乎重新計算了一些東西,我的<div>
突然出現並正確顯示。如果我刷新,事情再次被打破。
這是一個Chrome的bug,還是我的代碼有問題?
相關的代碼:
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";
}
根據你給我的w3.org鏈接,我應該能夠指定自動寬度/右,瀏覽器將解決寬度? 「3.'寬度'和'右'是'自動','左'不是'自動',那麼寬度會縮小到適合的範圍,然後解決'正確'」Chrome忽略寬度:自動;右:自動;造型,或至少沒有區別。我仍然在Chrome和Firefox/IE中獲得一個1像素的塊,其大小根據其包含的文本而定。 –