当前位置:  开发笔记 > 编程语言 > 正文

KeyDown事件被调用两次

如何解决《KeyDown事件被调用两次》经验,为你挑选了1个好方法。

我有这个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事件被调用两次?



1> Crescent Fre..:

适合我.请访问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版本(未发布)的行为完全相同.

你做错了什么.也许运行两次绑定的功能?

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有