Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改默认键操作JavaScript_Javascript_Jquery_Html_Preventdefault - Fatal编程技术网

更改默认键操作JavaScript

更改默认键操作JavaScript,javascript,jquery,html,preventdefault,Javascript,Jquery,Html,Preventdefault,可能重复: 是否有一种方法可以更改JavaScript中按键的默认字符。比如,如果有人按下“E”按钮,它会打印出一个p,这是实时的,就像它被输入到文本区域一样。用jQuery或类似的东西做这个?塞纳克斯 查看此框架以添加键盘快捷键 当然,它不会自动将任何按键转换为另一个字符并输出该字符,您必须确定页面的哪个部分具有焦点,例如文本字段,并使用您实际想要输入的字符修改其值。以下是一个完整的工作解决方案示例,根据答案: jQuery.fn.extend({ InsertCart:函数(myValu

可能重复:


是否有一种方法可以更改JavaScript中按键的默认字符。比如,如果有人按下“E”按钮,它会打印出一个p,这是实时的,就像它被输入到文本区域一样。用jQuery或类似的东西做这个?塞纳克斯

查看此框架以添加键盘快捷键


当然,它不会自动将任何按键转换为另一个字符并输出该字符,您必须确定页面的哪个部分具有焦点,例如文本字段,并使用您实际想要输入的字符修改其值。

以下是一个完整的工作解决方案示例,根据答案:

jQuery.fn.extend({
InsertCart:函数(myValue){
返回此。每个函数(i){
if(文档选择){
//适用于Internet Explorer等浏览器
这是focus();
sel=document.selection.createRange();
sel.text=myValue;
这是focus();
}
else if(this.selectionStart | | this.selectionStart==“0”){
//适用于基于Firefox和Webkit的浏览器
var startPos=this.selectionStart;
var endPos=this.selectionEnd;
var scrollTop=this.scrollTop;
this.value=this.value.substring(0,startPos)+myValue+this.value.substring(endPos,this.value.length);
这是focus();
this.selectionStart=startPos+myValue.length;
this.selectionEnd=startPos+myValue.length;
this.scrollTop=scrollTop;
}否则{
this.value+=myValue;
这是focus();
}
})
}
});
$(函数(){
var ta=$('').appendTo('body');
ta.按键(功能(e){
如果(e.which==101)//e
{
e、 预防默认值();
ta.插入式树脂(“P”);
}
});
});

@Bryan:虽然这个问题与链接的问题非常相似,但链接的问题没有真正的解决方案。这个问题有一个简单的答案(见下面我的答案)。谢谢。然而,TA是否需要附加到正文中,或者我可以使用传统的PrexCitng selecot吗?@JonahAllibone:无需附加;那只是为了演示。您可以使用例如
var ta=$(“#ta”)我最近尝试过这样做,但没有成功。什么也没发生。它不正常您是否有带有
id=“ta”
的文本区域?如果没有,您需要创建一个。如果您仍然有问题,请发布一个fiddle链接。我意识到我假设这也适用于contentEditable div,但是浏览器处理contentEditable div选择的方式似乎不同于textarea选择。如果你有一个解决方案,请张贴它!哈哈
jQuery.fn.extend({
    insertAtCaret: function(myValue) {
        return this.each(function(i) {
            if (document.selection) {
                //For browsers like Internet Explorer
                this.focus();
                sel = document.selection.createRange();
                sel.text = myValue;
                this.focus();
            }
            else if (this.selectionStart || this.selectionStart == '0') {
                //For browsers like Firefox and Webkit based
                var startPos = this.selectionStart;
                var endPos = this.selectionEnd;
                var scrollTop = this.scrollTop;
                this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos, this.value.length);
                this.focus();
                this.selectionStart = startPos + myValue.length;
                this.selectionEnd = startPos + myValue.length;
                this.scrollTop = scrollTop;
            } else {
                this.value += myValue;
                this.focus();
            }
        })
    }
});

$(function() {
    var ta = $('<textarea id="ta" style="width: 400px; height: 200px;"></textarea>').appendTo('body');
    ta.keypress(function(e) {
        if (e.which == 101) // e
        {
            e.preventDefault();
            ta.insertAtCaret('P');
        }
    });
});