Javascript onkeyup有时会被激发两次

Javascript onkeyup being fired twice sometimes

本文关键字:两次 onkeyup Javascript      更新时间:2023-09-26

由于某种原因,我的onkeyup似乎被IE9上的一些人解雇了两次。

我当前的功能如下:

document.getElementById("chatboxtextarea").onkeyup=function(e) {
    e = e || window.event;
    var msg = document.getElementById('chatboxtextarea').value;
    if(e.keyCode != null) {
        if (msg.replace(/'r/g, '''''r').replace(/'n/g, '') != "" && e.keyCode == 13) {
            var textarea = document.getElementById('chatboxtextarea');
            textarea.value = '';
            var d = new Date();
            var curr_hour = d.getHours();
            var curr_min = d.getMinutes();
            var tD = curr_hour + ":" + curr_min;

            var url = 'http://domain.com/sub/' + kanal + '/' + encodeURIComponent(_aNM) + '/' + encodeURIComponent(_sid) + '/' + encodeURIComponent(_aID) + '/' + encodeURIComponent(_pMsg) + '/' + encodeURIComponent(msg.replace(/'r/g, '').replace(/'n/g, '')) + '/' + encodeURIComponent(_hits);
            var data = {};
            var callback = function (data) { };
            J50Npi.getJSON(url, data, callback);                            
        } else if (msg.replace(/'r/g, '''''r').replace(/'n/g, '') == '') {
            var textarea = document.getElementById('chatboxtextarea');
            textarea.value = '';
        }           
    }
};

这是一个基本的聊天输入字段。问题是服务器(有时)会接收到来自这些IE9用户的两条消息。

我该如何添加一个检查,以查看人们是否在最后1秒内已经写了一条消息?就像垃圾邮件预防功能一样。。我想这能解决问题吗?

有什么想法吗?

有没有可能有人很快按了两次回车键?

每当我必须执行异步操作时,我都会取消输入。

在您的keycode==13检查之后,首先检查textares是否已经被禁用,如果它被禁用,则忽略任何进一步的处理。其次,将文本区域设置为禁用。第三,J50Npi.getJSON()操作成功后,删除禁用属性;

textarea.setAttribute("disabled","disabled");
textarea.removeAttribute("disabled");

http://jsfiddle.net/Tnwje/1/