admin管理员组文章数量:1302939
I've got this Prototype code to detect Enter pressing in textarea.
document.observe('keydown', function(e, el) {
if ((e.keyCode == 13) && (el = e.findElement('.chattext'))) {
e.stop();
// foo bar
}
}
And html
<textarea id="chattext_17" class="chattext" cols="20" rows="3"></textarea>
But the problem is, that event gets invoked twice. I even tried to rewrite it to jQuery
$('.chattext').live('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
// foo bar
}
});
But even then the event gets invoked twice.
When I try to debug it with FireBug, it always jumps here after pleting the event handler
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;
}
I'm no Prototype guru, so I don't know where the problem could be.
Why is the keydown event invoked twice?
I've got this Prototype code to detect Enter pressing in textarea.
document.observe('keydown', function(e, el) {
if ((e.keyCode == 13) && (el = e.findElement('.chattext'))) {
e.stop();
// foo bar
}
}
And html
<textarea id="chattext_17" class="chattext" cols="20" rows="3"></textarea>
But the problem is, that event gets invoked twice. I even tried to rewrite it to jQuery
$('.chattext').live('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
// foo bar
}
});
But even then the event gets invoked twice.
When I try to debug it with FireBug, it always jumps here after pleting the event handler
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;
}
I'm no Prototype guru, so I don't know where the problem could be.
Why is the keydown event invoked twice?
Share edited Dec 29, 2011 at 12:23 Rob W 349k87 gold badges807 silver badges682 bronze badges asked Sep 26, 2009 at 13:37 Jakub ArnoldJakub Arnold 87.3k92 gold badges235 silver badges334 bronze badges2 Answers
Reset to default 6Works for me. See for yourself at http://jsbin./ibozo/edit
<textarea id="chattext_17" class="chattext" cols="20" rows="3"></textarea>
<div id="dbg"></div>
script:
document.observe('keydown', function(e, el) {
if ((e.keyCode == 13) && (el = e.findElement('.chattext'))) {
e.stop();
$('dbg').insert('<div>enter pressed</div>')
}
})
Each debug statement gets inserted exactly once on each press of the [Enter] key. The jQuery version (not posted) behaves exactly the same.
You're doing something else wrong. Perhaps running the function that does the binding twice?
Alternatively this should work:
document.observe('keydown', function(e, el) {
if ((e.keyCode == 13) && (el = e.findElement('.chattext'))) {
e.die();
$('dbg').insert('<div>enter pressed</div>')
}
})
本文标签: javascriptKeyDown event gets invoked twiceStack Overflow
版权声明:本文标题:javascript - KeyDown event gets invoked twice - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741665573a2391287.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论