我有这个Prototype代码来检测Entertextarea中的压力.
document.observe('keydown', function(e, el) { if ((e.keyCode == 13) && (el = e.findElement('.chattext'))) { e.stop(); // foo bar } }
和HTML
但问题是,该事件被调用两次.我甚至试图将其重写为jQuery
$('.chattext').live('keydown', function(e) { if (e.keyCode == 13) { e.preventDefault(); // foo bar } });
但即使这样,事件也会被调用两次.
当我尝试使用FireBug进行调试时,它总是在完成事件处理程序后跳转到此处
function createWrapper(element, eventName, handler) { var id = getEventID(element); var c = getWrappersForEventName(id, eventName); if (c.pluck("handler").include(handler)) return false; var wrapper = function(event) { if (!Event || !Event.extend || // always false here (event.eventName && event.eventName != eventName)) return false; Event.extend(event); handler.call(element, event); // here the event gets called again }; wrapper.handler = handler; c.push(wrapper); return wrapper; }
我不是原型大师,所以我不知道问题出在哪里.
为什么keydown事件被调用两次?
适合我.请访问http://jsbin.com/ibozo/edit查看
脚本:
document.observe('keydown', function(e, el) { if ((e.keyCode == 13) && (el = e.findElement('.chattext'))) { e.stop(); $('dbg').insert('enter pressed') } })
每按一次[Enter]键,每个调试语句只插入一次.jQuery版本(未发布)的行为完全相同.
你做错了什么.也许运行两次绑定的功能?