Javascript 按键事件-事件发生后如何删除按键?

Javascript 按键事件-事件发生后如何删除按键?,javascript,Javascript,我的目标是:当用户单击某个键时,我需要将该键与字符串的第一个字母进行比较。如果匹配,我需要在文本字段中写入该字符串 通过使用按键功能,其工作方式如下: 输入用按键调用的函数 2.在其功能中: document.getElementById(“name”).value=“shiran” 然后添加用户按下的字符(将是s) 结果是“shiran”,而不仅仅是字符串(“shiran”) 我不能使用keyup和keydown函数,因为它们不能与keycode一起工作 所需结果:文本字段中的字符串 实际结果

我的目标是:当用户单击某个键时,我需要将该键与字符串的第一个字母进行比较。如果匹配,我需要在文本字段中写入该字符串

通过使用按键功能,其工作方式如下:

  • 输入用按键调用的函数
  • 2.在其功能中:
    document.getElementById(“name”).value=“shiran”

  • 然后添加用户按下的字符(将是s)
  • 结果是“shiran”,而不仅仅是字符串(“shiran”)

    我不能使用keyup和keydown函数,因为它们不能与keycode一起工作

    所需结果:文本字段中的字符串

    实际结果:字符串+文本字段中按下的键

    代码如下:

    <!DOCTYPE html>
    <html>
    <head><title>cookies</title>
    </head>
    
    <body>
    
    <form >
    user name: <input type = "text" id='name' onkeypress='completeFields(event);'> </br>
    
    </form>
    
    <script>
    
    function completeFields(e){
    
    //get the key
    var unicode;
    if (e.keyCode)
        unicode = e.keyCode;
    else
        unicode = e.charCode;
    
    var username="shiran";
    var ch1=username.charAt(0);
    var ch2 = String.fromCharCode(unicode);
    if(username!=null && username!=""  && ch1==ch2)
    {
    
        document.getElementById("name").value="shiran";
    }
    }
    
    </script>
    
    
    </body>
    </html>
    
    
    饼干
    用户名:
    函数completeFields(e){ //拿到钥匙 var-unicode; 如果(例如键码) unicode=e.keyCode; 其他的 unicode=e.charCode; var username=“shiran”; var ch1=username.charAt(0); var ch2=String.fromCharCode(unicode); 如果(用户名!=null&&username!=“”&&ch1==ch2) { document.getElementById(“name”).value=“shiran”; } }
    这就是你想要做的吗

    相关JavaScript:

    (function (D, S, undefined) {
        'use strict';
        var base, field;
        field = D.getElementById('name');
        base = 'shiran';
        field.onkeypress = function (e) {
            var char;
            char = S.fromCharCode(e.keyCode);
            if (char !== base[0]) {
                e.preventDefault();
            }
        };
    }(document, String));
    
    并且,嵌入到OP代码的清理版本中:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf8" />
            <title>cookies</title>
        </head>
        <body>
        <form >
            <label>
            <span>user name: </span> 
                <input data-base="shiran"  id="name" onkeypress="autoComplete(event);" type="text">
            </label>
        </form>
        <script>
            (function (S, W, undefined) {
                'use strict';
                function autoComplete (e) {
                    var base, char, input, value;
                    input = e.currentTarget;
                    base = input.dataset.base;
                    value = input.value;
                    char = S.fromCharCode(e.keyCode);
                    // We'll handle the keyup if the char isn't just whitespace
                    if (!/\s+/.test(char)) {
                       e.preventDefault();
                    }
                    if (char === base[value.length]){
                        input.value = base;
                    }
                }
                W.autoComplete = autoComplete;
            }(String, window));
        </script>
        </body>
    </html>
    
    
    饼干
    用户名:
    (功能(S、W、未定义){
    "严格使用",;
    函数自动完成(e){
    var基、字符、输入、值;
    输入=e.currentTarget;
    base=input.dataset.base;
    value=input.value;
    char=S.fromCharCode(e.keyCode);
    //如果字符不仅仅是空白,我们将处理keyup
    如果(!/\s+/.test(char)){
    e、 预防默认值();
    }
    if(char==base[value.length]){
    input.value=基数;
    }
    }
    W.自动完成=自动完成;
    }(字符串、窗口);
    
    使用
    事件.preventDefault
    方法或
    return false
    防止浏览器事件-在输入中添加字符。

    问题是什么?如果这不起作用,请描述它与所需行为的区别。不确定链接是否指向正确的bin。请注意“我不能使用keyup和keydown函数,因为它们不能与keycode一起使用”:它们肯定会这样做。如果它们没有出现在你的代码中,那么你的代码是错误的,而不是事件没有使用KeyCode。有趣的是,你这么说。。因为如果你是对的,那么我可以简单地使用功能keyup而不是keypress。。这样我就不会有任何问题了……但我不能担心。我不明白你做了什么。我加了一把小提琴,想把它弄清楚。基本上,我使用的是
    e.preventDefault()以防止事件传播。请将其添加到我的原始代码中,好吗?我不知道怎么做。@jameslafferty。。非常感谢你的努力。。然而这不符合我在艾尔的愿望。。我只想删除事件keypress happend后附加到文本字段的最后一个字符。。并将它的字符串保留在文本字段中..您是否希望复制一种自动完成功能?(调整代码很容易,只是可能不清楚你在问什么。)return false不起作用。我将event.preventDefault?function completeFields(e){e.preventDefault()
    …其他代码放置在shell的何处