有时会触发JS退格键按下事件,有时不会触发

争吵

我有这段代码:

container.unbind('keypress').bind('keypress',function (e) {

            var code = e.which,
                charac = String.fromCharCode(code),
                totalChar = $(this).text().replace(/\s+/g, ''),
                diff,
                previousChar = publisher.typeHistory.length > 0 ? publisher.typeHistory[publisher.typeHistory.length-1]:''
                previousCharCode = previousChar.charCodeAt(0);

            if(e.keyCode === undefined){ // backspace
                getCharacterDiff();
                console.log(totalChar.length-1);
                if(totalChar.length-1 === 0){
                    publisher.typeHistory = [];
                }
            }  

            console.log(previousChar);
            if(isCharacterKeyPress(code)){
                if (charac.toUpperCase() != charac.toLowerCase() ) { // Is a char or space


                    if(charac === charac.toUpperCase()){ // Is a char upper ?

                        if(previousChar === ' '){
                            console.log('upper + previous == space ', publisher.typeHistory);
                        }else {
                            publisher.typeHistory = [];
                        }

                        push = true;
                    }
                    else if (charac === charac.toLowerCase()){
                        if(previousCharCode === 32){
                            publisher.typeHistory = [];

                        }
                        if(hasUpperCase(publisher.typeHistory.join(''))){
                            push = true;
                        }
                        else {
                            push = false;
                        }

                    }
                    else {
                        push = false;
                    }


                }
                else if (code === 32){
                    console.log('space');
                    console.log(previousCharCode);
                    if (previousCharCode === 32){
                        push = false;
                        publisher.typeHistory = [];
                    }

                    // else if(previousChar === 32) { // is the spacebar ?
                    //  console.log(previousChar);

                    // }
                }
                else { // = it's a number / , / ., etc..
                        console.log('not chara or space');
                        push = false;
                        publisher.typeHistory = [];



                }


                if (push) {
                    publisher.typeHistory.push(charac);
                }

            }

            console.log(publisher.typeHistory);
            previousTotal = publisher.typeHistory.join('');


            if (publisher.typeHistory.length > 2) {
                exp = publisher.typeHistory.join('');
                publisher.getResults(service,type,exp);
            }
            else {
                if(publisher.typeHistory.length === 0){
                    publisher.typeHistory = [];

                }
                publisher.hideResults();
            }

    });

这样,我可以处理在具有的元素中键入的键contenteditable=true,然后将其发送到向PHP脚本发出请求的方法。

在这里,container可以是具有contenteditable = true的任何元素。

问题是:我用于e.keyCode === undefined检查用户是否键入退格键,以便可以更新请求。但是e.keyCode === undefined仅适用于单个元素,不适用于其他元素(另一方面,不会触发keypress事件)。

所以我不知道这是从哪里来的:

  • 我知道keypress事件无法检测到退格键的按下(但是在这种情况下,使用此代码,它确实可以)
  • 在HTML / JS中,可以使用的ayay元素之间没有区别 container
  • 我不能使用keyup / keydown,因为它不区分大小写

我想念什么?

从MDN上的按键事件:

当按下某个键时会触发keypress事件,并且该键通常会产生一个字符值

因此,您必须对某些键使用keyupkeydown事件,例如转义键或退格键,因为它们不会产生字符。

退格键的键码是8,因此您的代码可能如下所示:

container.unbind('keyup').bind('keyup',function (e) {

    ...

    if(e.keyCode === 8){ // backspace
        getCharacterDiff();
        console.log(totalChar.length-1);
        if(totalChar.length-1 === 0){
            publisher.typeHistory = [];
        }
    }  

    ...

});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有时会触发两次

来自分类Dev

为什么我的PC有时会认为我不断按下控制键?

来自分类Dev

Vue.js 子组件事件有时不会触发

来自分类Dev

切换事件侦听器的大小写有时会触发事件

来自分类Dev

在* ngFor中使用管道,页面有时会更新,有时不会

来自分类Dev

为什么`.asInstanceOf`有时会抛出,有时却不会抛出?

来自分类Dev

ItemGroup中的MSBuild通配符有时会扩展,有时不会扩展

来自分类Dev

numpy:索引太大,有时会出现异常,有时不会

来自分类Dev

为什么来自子进程的管道有时会中断,有时不会?

来自分类Dev

为什么我有时会得到嵌入的属性有时不会?

来自分类Dev

从www-data触发的Gradle有时会失败-没有详细的错误输出

来自分类Dev

有时会恢复,有时会结帐

来自分类Dev

单击功能有时会触发两次,三次等等

来自分类Dev

为什么Android Beacon Library didRangeBeaconsInRegion 有时会触发两次?

来自分类Dev

为什么 x-terminal-emulator 有时会在启动时退出,有时不会?

来自分类Dev

移动Safari有时不触发点击事件

来自分类Dev

有时会显示异常TypeError警告,使用生成器的throw方法时有时不会显示

来自分类Dev

F#和自动转换:有时会,有时不会,其背后的原理是什么?

来自分类Dev

为什么滚动条有时会显示在 Chrome 扩展中有时不会显示

来自分类Dev

WPF有时会忽略PropertyChanged事件

来自分类Dev

Vuejs @click事件有时会出错

来自分类Dev

Google Analytics(分析)发送事件有时会失败

来自分类Dev

Alt +箭头有时会旋转屏幕,有时会在浏览器中充当“后退”键

来自分类Dev

jQuery滚动事件的计时问题(有时效果很好,有时会延迟)

来自分类Dev

滚动时Android Studio有时会滞后

来自分类Dev

KDE 有时会在唤醒时出现故障

来自分类Dev

animationstart有时仅触发?

来自分类Dev

有时从未触发DiscoverServices

来自分类Dev

引导时,有时会显示“ No bootable device ...”,有时它可以工作

Related 相关文章

  1. 1

    有时会触发两次

  2. 2

    为什么我的PC有时会认为我不断按下控制键?

  3. 3

    Vue.js 子组件事件有时不会触发

  4. 4

    切换事件侦听器的大小写有时会触发事件

  5. 5

    在* ngFor中使用管道,页面有时会更新,有时不会

  6. 6

    为什么`.asInstanceOf`有时会抛出,有时却不会抛出?

  7. 7

    ItemGroup中的MSBuild通配符有时会扩展,有时不会扩展

  8. 8

    numpy:索引太大,有时会出现异常,有时不会

  9. 9

    为什么来自子进程的管道有时会中断,有时不会?

  10. 10

    为什么我有时会得到嵌入的属性有时不会?

  11. 11

    从www-data触发的Gradle有时会失败-没有详细的错误输出

  12. 12

    有时会恢复,有时会结帐

  13. 13

    单击功能有时会触发两次,三次等等

  14. 14

    为什么Android Beacon Library didRangeBeaconsInRegion 有时会触发两次?

  15. 15

    为什么 x-terminal-emulator 有时会在启动时退出,有时不会?

  16. 16

    移动Safari有时不触发点击事件

  17. 17

    有时会显示异常TypeError警告,使用生成器的throw方法时有时不会显示

  18. 18

    F#和自动转换:有时会,有时不会,其背后的原理是什么?

  19. 19

    为什么滚动条有时会显示在 Chrome 扩展中有时不会显示

  20. 20

    WPF有时会忽略PropertyChanged事件

  21. 21

    Vuejs @click事件有时会出错

  22. 22

    Google Analytics(分析)发送事件有时会失败

  23. 23

    Alt +箭头有时会旋转屏幕,有时会在浏览器中充当“后退”键

  24. 24

    jQuery滚动事件的计时问题(有时效果很好,有时会延迟)

  25. 25

    滚动时Android Studio有时会滞后

  26. 26

    KDE 有时会在唤醒时出现故障

  27. 27

    animationstart有时仅触发?

  28. 28

    有时从未触发DiscoverServices

  29. 29

    引导时,有时会显示“ No bootable device ...”,有时它可以工作

热门标签

归档