2012-02-01 15 views
5

Sayfamda bir AutoCompleteExtender var, ancak sayfamda aşağı kaydırdığımda ve bunu kullanırken önerileri yanlış (dikey) konumda gösterir.
Bu Safari & Chrome ile olur, ancak IE & FF ile olmaz ve bu yüzden webkit'in hatası olabileceğini düşündüm.
İşte kod:OtomatikCompleteExtender, webkit tarayıcıları için yanlış konuma sahipse, sayfayı aşağı kaydırdıktan sonra

<td> 
     <div style="position: relative;"> 
      <asp:TextBox ID="DepartureAirportTextBox" runat="server" CssClass="DepartureAirport airport-textbox" 
          onblur="javascript:DepartureLostFocus();" onkeydown="javascript:DepartureChanged(event);"></asp:TextBox> 
      <asp:Panel ID="DepartureAutocompleteDropDownPanel" runat="server" ScrollBars="Vertical" 
          CssClass="autocomplete-panel" Style="display: none;" /> 
      <AjaxControlToolkit:AutoCompleteExtender ID="DepartureAirportAutoComplete" runat="server" 
          TargetControlID="DepartureAirportTextBox" CompletionSetCount="200" ServicePath="../WebServices/SecureService.asmx" 
          ServiceMethod="ListAirports" MinimumPrefixLength="3" BehaviorID="DepartureAirport" 
          CompletionListElementID="DepartureAutocompleteDropDownPanel" OnClientItemSelected="SelectDepartureAirport" 
          OnClientPopulating="ShowDepartureIcon" OnClientPopulated="HideDepartureIcon"> 
      </AjaxControlToolkit:AutoCompleteExtender>    
    </div> 
</td> 

SO üzerinde this & this çözümler denedi, ama hiçbiri çalıştı.
Nasıl düzeltilir?

Güncelleştirme:
Microsoft'tan the simplest example bile bu sorun vardır. Kaydırılabilir alan oluşturmak ve test etmek içingenişletici metin kutusundan önce ve sonra <p> öğelerini ekleyin. yukarıdaki bağlantıdan GetCompletionList için

<asp:TextBox ID="txtMovie" runat="server"></asp:TextBox> 
     <AjaxControlToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" TargetControlID="txtMovie" 
      runat="server" UseContextKey="True" MinimumPrefixLength="2" ServiceMethod="GetCompletionList" /> 

kodu alın. Bu sorun o kadar kolay tekrarlanabilir.

+0

Ben bunun bu otomatik tamamlama yaptık biri tarafından yapılması gerektiğini düşünüyorum. Sanırım sorun, son render, damla damla, metin kutusu ile bir div içinde değil ve css de düzeltmek gerekir. – Aristos

cevap

6

solution on Asp.net forums numaralı ürün bulunamadı. Genişletici en OnClientShown olaya

function resetPosition(object, args) { 
    var tb = object._element; 
    var tbposition = findPositionWithScrolling(tb); 
    var xposition = tbposition[0]; 
    var yposition = tbposition[1] + 20; // 22 textbox height 
    var ex = object._completionListElement; 
    if (ex) 
     $common.setLocation(ex, new Sys.UI.Point(xposition, yposition)); 
} 
function findPositionWithScrolling(oElement) { 
    if (typeof (oElement.offsetParent) != 'undefined') { 
     var originalElement = oElement; 
     for (var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent) { 
      posX += oElement.offsetLeft; 
      posY += oElement.offsetTop; 
      if (oElement != originalElement && oElement != document.body && oElement != document.documentElement) { 
       posX -= oElement.scrollLeft; 
       posY -= oElement.scrollTop; 
      } 
     } 
     return [posX, posY]; 
    } else { 
     return [oElement.x, oElement.y]; 
    } 
} 

Çağrı resetPosition

+0

Hala ortak olanı merak ediyorum! Sys.UI.DomElement sınıfının bir örneğidir? –

+3

20 "sihirli numara" içeren tb.clientHeight'ı kullanmak daha iyidir. – aleyush

İlgili konular