2011-12-12 54 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