Events Scriptaculous自动完成列表在滚动条单击时关闭

Events Scriptaculous自动完成列表在滚动条单击时关闭,events,autocomplete,prototypejs,scriptaculous,Events,Autocomplete,Prototypejs,Scriptaculous,我对Prototype 1.6的Autocomplete有一个非常恼人的问题。我用一个包含自动完成的表单设置和对话框样式的div。在单击或拖动滚动条之前,一切正常;它关闭了建议列表。我检查了这个,但现在我得到了一个javascript错误 event.src元素未定义 我正在检查controls.js并试图捕获onBlur事件中的事件对象,但它是空的。已打印offsetX属性,但未定义。看起来这个事件已经不存在了。无论哪种方式,它都会阻止列表关闭,但如果我在区域外单击,列表现在不会关闭。这也是一

我对Prototype 1.6的Autocomplete有一个非常恼人的问题。我用一个包含自动完成的表单设置和对话框样式的div。在单击或拖动滚动条之前,一切正常;它关闭了建议列表。我检查了这个,但现在我得到了一个javascript错误

event.src元素未定义

我正在检查controls.js并试图捕获onBlur事件中的事件对象,但它是空的。已打印offsetX属性,但未定义。看起来这个事件已经不存在了。无论哪种方式,它都会阻止列表关闭,但如果我在区域外单击,列表现在不会关闭。这也是一个问题

有人有同样的问题吗?有什么想法吗


提前感谢

我昨天有一个确切的问题,但在做了一些研发之后,我得到了一个非常方便的解决方法。
默认情况下,该脚本在搜索文本框上的模糊事件中隐藏了结果div(建议列表),因此只要我们单击结果div的滚动条,焦点就会从输入元素中丢失&结果div关闭。所以我在controls.js中做了一个小的编辑来更改脚本的行为,所以现在result div close方法不会从输入元素中调用blur(focus out),而是在除了文本输入元素之外的文档上单击时触发

为了您的方便,我将编辑好的controls.js

如果您想知道JS文件中发生了什么变化,请看这里

  • 向文档中添加了事件侦听器。就在这条线下方
    Event.observe(this.update,“keypress”,this.onKeyPress.bindAsEventListener(this))

  • 添加了一个新的onMouseup方法

    onMouseup: function(event) {    
    if(!this.hasFocus) {  
        this.hideTimeout = setTimeout(this.hide.bind(this), 250);   
            this.hasFocus = false;  
            this.active = false;  
        }  
    },
    
  • 修改onBlur方法(在块中注释掉两行)

  • 我希望这能解决你的问题

    谢谢

    谢谢@Vinod Kumar。但当鼠标在div外部单击时,它仍然阻止使用建议关闭div。但是谢谢!我也在IE上使用了这个解决方案,谢谢@Vinod Kumar,在Chrome和IE上进行了测试。它确实为我关闭了div.hm,但问题是clickEvent停止了工作。我使用自动完成值作为服务调用的输入参数。如果我在OnBlur()中注释掉两行,它将停止工作,因此情况更糟。如何解决这个问题?
    onMouseup: function(event) {    
    if(!this.hasFocus) {  
        this.hideTimeout = setTimeout(this.hide.bind(this), 250);   
            this.hasFocus = false;  
            this.active = false;  
        }  
    },
    
    onBlur: function(event) { 
    
        //this.hideTimeout = setTimeout(this.hide.bind(this), 250);   
        //this.active = false;  
        this.hasFocus = false;       
    }