我对Prototype 1.6的Autocomplete有一个非常烦人的问题。我设置了一个带有表单的对话框式div,其中包含一个Autocomplete。一切正常,直到我点击滚动条,或拖动它;它关闭了建议列表。我检查了这个solution,但现在我收到了一个javascript错误
event.srcElement未定义
我正在检查controls.js并尝试捕获onBlur事件中的事件对象,但它是空的。打印offsetX属性并且未定义。看起来事件不再存在了。无论哪种方式,它都会阻止列表关闭但是,如果我在区域外单击,则列表现在不会关闭。这也是一个问题
有同样问题的人吗?有什么想法吗?
提前致谢
答案 0 :(得分:1)
我昨天遇到了确切的问题,但在做了一些研究之后我得到了一个非常方便的解决方法。
默认情况下,此脚本将结果div(建议列表)隐藏在搜索文本框上的blur事件中,因此只要我们单击结果div的滚动条焦点就会从输入元素&中丢失。结果div关闭。所以我在controls.js中做了一个小编辑来改变脚本的行为,所以现在结果div close方法不会从输入元素调用模糊(焦点输出),而是在文本输入元素之外的文档上单击时触发。
为方便起见,我已经编辑了controls.js here。
如果你想知道JS文件中有什么变化,这就是;
为文档添加了一个事件侦听器。就在这条线的正下方
“Event.observe(this.update,”keypress“,this.onKeyPress.bindAsEventListener(this));”
Event.observe($(document), "mouseup", this.onMouseup.bindAsEventListener(this));
添加了一个新的onMouseup方法。
onMouseup: function(event) {
if(!this.hasFocus) {
this.hideTimeout = setTimeout(this.hide.bind(this), 250);
this.hasFocus = false;
this.active = false;
}
},
修改onBlur方法(在块中注释掉两行)
onBlur: function(event) {
//this.hideTimeout = setTimeout(this.hide.bind(this), 250);
//this.active = false;
this.hasFocus = false;
}
我希望这能解决你的问题。
感谢
Vinod Kumar