由于某些原因,我的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秒钟内已经写了一条消息?就像垃圾邮件预防功能一样。我想那可以解决问题?

有任何想法吗?

最佳答案

人们是否可能很快就按下Enter键两次?

每当我必须执行异步操作时,我都会对输入进行去抖动。

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

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


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

关于javascript - Javascript onkeyup有时会被触发两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18363092/

10-16 21:18