2011-12-12 79 views
0

我對自動完成與原型1.6有一個非常討厭的問題。我使用包含Autocomplete的表單設置對話框樣式的div。一切工作正常,直到我點擊滾動條,或拖動它;它關閉了建議列表。我檢查這個solution,但現在我得到一個JavaScript錯誤Scriptaculous自動完成列表在滾動條上關閉點擊

event.srcElement未定義

我檢查controls.js並試圖抓住onblur事件中的事件對象,但它的旅行空。打印offsetX屬性並且未定義。看起來事件不再存在。無論哪種方式,它都會阻止列表關閉,但是,如果我在區域外單擊,列表現在不會關閉。這也有點問題

任何人都有這個相同的問題?任何想法?

在此先感謝

回答

1

我有確切的問題,昨天,但做了一些[R & d後,我得到了一個非常方便的修正這一點。
默認情況下,此腳本隱藏了搜索文本框上模糊事件的結果div(Suggestion List),因此只要我們單擊結果div的滾動條焦點從輸入元素&結果div就會關閉。所以我在controls.js中做了一個小的編輯來改變腳本的行爲,所以現在結果div close方法不會調用input元素的blur(focus out),而是觸發除了文本輸入元素之外的文檔的點擊。

爲了您的方便,我已將編輯後的controls.js here

如果您想知道JS文件中發生了什麼變化,請點擊此處;

  1. 向文檔添加了事件偵聽器。就在這條線下面
    「Event.observe(this.update,」keypress「,this.onKeyPress.bindAsEventListener(this));」

    Event.observe($(document), "mouseup", this.onMouseup.bindAsEventListener(this)); 
    
  2. 增加了一個新的onMouseup方法。

    onMouseup: function(event) {  
    if(!this.hasFocus) { 
        this.hideTimeout = setTimeout(this.hide.bind(this), 250); 
         this.hasFocus = false; 
         this.active = false; 
        } 
    }, 
    
  3. 修改的onblur方法(註釋掉塊雙線)

    onBlur: function(event) { 
    
        //this.hideTimeout = setTimeout(this.hide.bind(this), 250); 
        //this.active = false; 
        this.hasFocus = false;  
    } 
    

我希望這將解決您的問題。

感謝
Vinod Kumar

+0

感謝@Vinod庫馬爾。但它仍然可以防止在鼠標在其外部點擊時使用建議關閉div。但是,謝謝! – Cheluis

+0

我也使用過這個解決方案,感謝@Vinod Kumar,在Chrome和IE上測試過。它確實爲我關閉了div。 – MartinC

+0

hm,但問題是clickEvent停止工作。我正在使用自動完成的值作爲服務調用的輸入參數。如果我在OnBlur()中註釋掉兩行,它會停止工作,所以更糟糕。如何解決這個問題? – MartinC