gpt4 book ai didi

javascript - 我可以有条件地更改按键时输入的字符吗?

转载 作者:行者123 更新时间:2023-12-03 21:48:36 25 4
gpt4 key购买 nike

是否可以更改按键输入的字符,而无需手动执行?

例如,如果我想根据某些条件强制使用大写字母,最好执行以下操作:

function onKeypressHandler(e)
{
if ( condition )
{
e.which -= 32;
}
}

但这当然行不通。

注意:不是全面大写,而是特定字符。

也许我想说if ( e.which >= 97 && e.which <= 102 )if ( Wind.Direction == 'South' )或其他 - 条件本身并不重要,但大写必须仅适用于当前字符而不是整个输入。


我可以通过手动附加更改后的字符来完成此操作,但这是一种丑陋且困惑的方法,而且可能比实际速度慢。

function onKeypressHandler(e)
{
if ( condition )
{
$j(this).val( $j(this).val() + String.fromCharCode( e.which - 32 ) );
return false;
}
}

此方法的一个特定缺陷 - 如果选择所有输入文本并输入 key ,如果它落入其中,则它不会删除现有内容,而只是附加到用户想要删除的内容。 (需要调查检测任何选定的文本来解决这个问题,这使得这个问题更加丑陋。)

谁能提供更好的解决方案吗?

最佳答案

以下内容将完成这项工作。它基于an answer I wrote to another question 。定制transformTypedChar功能满足您的需求;我的示例仅将字母 a-g 大写。

如果您需要在文本区域而不是<input type="text">上使用它然后请注意,IE <= 8 中存在换行问题,为简洁起见,以下代码不会处理这些问题。您可以在此处找到用于获取文本区域内的选择的跨浏览器功能:Is there an Internet Explorer approved substitute for selectionStart and selectionEnd?

function transformTypedChar(charStr) {
return /[a-g]/.test(charStr) ? charStr.toUpperCase() : charStr;
}

document.getElementById("your_input_id").onkeypress = function(evt) {
var val = this.value;
evt = evt || window.event;

// Ensure we only handle printable keys, excluding enter and space
var charCode = typeof evt.which == "number" ? evt.which : evt.keyCode;
if (charCode && charCode > 32) {
var keyChar = String.fromCharCode(charCode);

// Transform typed character
var mappedChar = transformTypedChar(keyChar);

var start, end;
if (typeof this.selectionStart == "number" && typeof this.selectionEnd == "number") {
// Non-IE browsers and IE 9
start = this.selectionStart;
end = this.selectionEnd;
this.value = val.slice(0, start) + mappedChar + val.slice(end);

// Move the caret
this.selectionStart = this.selectionEnd = start + 1;
} else if (document.selection && document.selection.createRange) {
// For IE up to version 8
var selectionRange = document.selection.createRange();
var textInputRange = this.createTextRange();
var precedingRange = this.createTextRange();
var bookmark = selectionRange.getBookmark();
textInputRange.moveToBookmark(bookmark);
precedingRange.setEndPoint("EndToStart", textInputRange);
start = precedingRange.text.length;
end = start + selectionRange.text.length;

this.value = val.slice(0, start) + mappedChar + val.slice(end);
start++;

// Move the caret
textInputRange = this.createTextRange();
textInputRange.collapse(true);
textInputRange.move("character", start - (this.value.slice(0, start).split("\r\n").length - 1));
textInputRange.select();
}

return false;
}
};

关于javascript - 我可以有条件地更改按键时输入的字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com