Javascript 仅当选中复选框时,才将输入文本转换为大写

Javascript 仅当选中复选框时,才将输入文本转换为大写,javascript,jquery,html,Javascript,Jquery,Html,我有复选框和输入文本,我需要把输入字符大写,只有当复选框被选中 所以,如果没有选中复选框,并且我键入“aa”,那么选中复选框并键入“bb”,结果应该是:“aaBB” 我有这段代码,但这是不正确的,因为当选中复选框时,它会将整个输入值变成大写 $(文档).ready(函数(){ $('input').keyup(函数(){ 如果($(“#ch”)是(“:选中”)){ this.value=this.value.toLocaleUpperCase(); } }); }); 您可以使用纯JavaSc

我有复选框和输入文本,我需要把输入字符大写,只有当复选框被选中

所以,如果没有选中复选框,并且我键入“aa”,那么选中复选框并键入“bb”,结果应该是:“aaBB”

我有这段代码,但这是不正确的,因为当选中复选框时,它会将整个输入值变成大写

$(文档).ready(函数(){
$('input').keyup(函数(){
如果($(“#ch”)是(“:选中”)){
this.value=this.value.toLocaleUpperCase();
}
});
});

您可以使用纯JavaScript,使用
按键
事件,并根据复选框状态向当前输入值添加大写或非大写字符

使用
keypress
事件比使用
keyup
更可取,因为您可以在将密钥添加到输入之前截取密钥,这允许您转换或不转换密钥,甚至丢弃密钥。但是,使用
keyup
会强制您更改整个输入值,因为该值已经添加到输入中。在这种情况下,您可能还会看到一个小的闪烁

您还必须通过调用
event.preventDefault()
,防止事件完成执行,否则该字符将被添加到输入中两次

您还需要使用
input.selectionStart
在正确的位置插入字符。插入后,您必须同时递增
input.selectionStart
input.selectionEnd
,请参阅

const checkbox=document.querySelector('ch');
常量输入=document.querySelector('#myinp');
input.addEventListener('keypress',事件=>{
const checked=checkbox.checked;
const char=checkbox.checked?event.key.toLocaleUpperCase():event.key;
const pos=input.selectionStart | | 0;
input.value=input.value.slice(0,pos)+char+input.value.slice(pos);
input.selectionStart=pos+1;
input.selectionEnd=pos+1;
event.preventDefault();
});

试试这个-

$(文档).ready(函数(){
$('input').keyup(函数(e){
如果($(“#ch”)是(“:选中”)){
设lastChar=e.key;
lastChar=lastChar.toUpperCase();
this.value=this.value.substr(0,this.value.length-1)+lastChar;
}
});
});


Nice,但如果键入一些文本,然后将光标聚焦在输入的开头并再次键入一些文本,文本将添加到输入的末尾,而不是光标所在的位置currently@OTAR,我更新了代码,使用input.selectionStartGracias将其插入到正确的位置