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

时间:2011-12-12 21:21:57

标签: events autocomplete prototypejs scriptaculous

我对Prototype 1.6的Autocomplete有一个非常烦人的问题。我设置了一个带有表单的对话框式div,其中包含一个Autocomplete。一切正常,直到我点击滚动条,或拖动它;它关闭了建议列表。我检查了这个solution,但现在我收到了一个javascript错误

  

event.srcElement未定义

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

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

提前致谢

1 个答案:

答案 0 :(得分:1)

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

为方便起见,我已经编辑了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;       
    } 
    
  4. 我希望这能解决你的问题。

    感谢
    Vinod Kumar