我不确定我做错了什么,如果filter_horizontal
出现问题,或者我对它应该表现的方式的期望是错误的。任何见解都赞赏!
在我看来,当你使用filter_horizontal
时,在文本框中键入几个字符以缩小你的选择范围以便有一个项目,然后点击输入,它应该:
它实际上做的是:
我做错了吗?这是每个人都看到的行为吗?有办法解决这个问题吗?
我正在使用Django 1.2.3,我在Chrome 8.0.552.237,Firefox 3.6.13和IE 8中测试过它。
答案 0 :(得分:1)
我可以确认Django 1.2.1上的行为。
<强>问题:强>
看起来admin/js/SelectFilter2.js
注册了一个密钥处理程序来进行过滤。如果键是enter键,则此处理程序也返回false,该键尝试取消表单提交。
来自admin / js / SelectFilter2.js第85行:
// don't submit form if user pressed Enter
if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
from.selectedIndex = 0;
SelectBox.move(field_id + '_from', field_id + '_to');
from.selectedIndex = 0;
return false;
}
这对我来说似乎很好,所以我在init
方法的末尾添加了一个事件处理程序来捕获表单的提交事件:
addEvent(document.forms[0], 'submit', function(event) {
console.log("Form submitted");
}
执行此操作后,很明显提交之前 keyUp
事件。因此,按Enter键提交表单,keyUp
事件永远不会到达字段。
解决方法:强>
我能够通过放弃表单上的所有输入keyUp
来解决这个问题。将其添加到SelectFilter2.js
中的init方法的末尾:
addEvent(document.forms[0], 'keyup', function(event) {
if (event.keyCode && event.keyCode == 13) {
return false;
}
});
这是解决问题的快速而肮脏的方法,但是在事件的事件之后触发了表单事件,所以它似乎有效。但它也阻止了回车键在其他地方提交表单。
这应该归档为django bug。