Jqueryを使用してJavaScriptでロジックを記述しています。ここで、入力コンテンツをREGEXパターンと照合する必要があります。例:
"^[a-zA-Z0-9_]*$" //Alpha-numeric and _
ロジックはほぼ完了しています。ファンクションキーDELのフィルタリングに少し問題があります。ロジックは、次のようになります。
var FunctionsKey = new Array(8, 9, 13, 16, 35, 36, 37, 39, 46);
function keypressValidation(key) {
if (config.regexExp != null) {
if ($.inArray(key, FunctionsKey) != -1) {
return true;
}
else {
var keyChar = String.fromCharCode(key);
return RegexCheck(keyChar);
}
}
return true;
}
KeyCodeが配列内の1つである場合は通過させ、そうでない場合はcharを取得してREGEXと比較します。問題は次のとおりです。一部のブラウザでは、DELと「。」 (ピリオド記号)は同じキーコード46を持っています。
したがって、ファンクションキーをフィルタリングするためのより良いロジックがありますか、またはその場合の条件を記述する必要があります。配列から46を削除して、charに変換しようとします。そうでない場合は、正規表現関数に移動します。通過させますか?他の質問は、いくつかのブラウザでより多くの共有キーコードがあるかどうかです。
編集:ユーザーがどのキーを押したか(DELまたはピリオド)は関係ないため、提案されたソリューションは機能しません。少なくともOPERAおよびFF =(。
110は10進キーコード、46はDELキーです。
楽しみのために:これを入れて、何を打ったかを確認してください!編集:焦点を絞ったイベントを追加しました
/* handle special key press */
$(document).ready(function() {
function checkAKey(e) {
var shouldBubble = true;
switch (e.keyCode) {
// user pressed the Tab
case 9:
{
alert("Tab hit, no bubble");
shouldBubble = false;
break;
};
// user pressed the Enter
case 13:
{
alert("Enter");
break;
};
// user pressed the ESC
case 27:
{
alert("Escape");
break;
};
};
/* this propogates the jQuery event if true */
return shouldBubble;
};
$("*").keydown(function(e) {
return checkAKey(e);
});
});
OR
$(document).ready(function() {
/* handle special key press */
function checkFieldKey(e, me) {
var shouldBubble = true;
switch (e.keyCode) {
// user pressed the Enter
case 13:
{
$(me).blur();
$("#somewhereElse").focus();
shouldBubble = false;
break;
};
};
/* this propogates the jQuery event if true */
return shouldBubble;
};
/* user pressed special keys while in Selector */
$("#myField").keydown(function(e) {
return checkFieldKey(e, $(this));
});
});
キーパッドの10進数またはドットキーコードは190です。テンキーの10進数は110です。
乾杯..!!
@ Mark Schultheiss '答えは本当に良いです、私はそれにもう少し追加します:あなたがプッシュする必要があるとき DEL 入力要素の外側にあるキーボードのボタン(つまり、テキストフィールドがフォーカスを失ったとき)は、それをインターセプトする必要があります。これは次のように行うことができます。
$("#selector-for-a-textbox, body").keydown(function(event){
if(event.keyCode==46){
// do something here
}
});
違いは次のとおりです。キーを押すと、「DELETE」キーと「。」が表示されます。 keyはキーコード46を返します。
したがって、キーアップまたはキーダウンでコードを記述してから、「DELETE」キーが適切に機能します。
チェックするには http://javascript.info/tutorial/keyboard-events
不正なコード
window.addEventListener("keypress", dealWithKeyboard, false);
正しいコード:
window.addEventListener("keydown", dealWithKeyboard, false);
最終コード
window.addEventListener("keydown", dealWithKeyboard, false);
function dealWithKeyboard(e) { // CHECK KEYPRESS EVENT
if(e.keyCode ==46){
delete_object();}
}
それは私にとってうまく機能しています。
小数の前にn桁、小数の後にn桁が必要な場合は、単純に、を使用できます。
_var validate = function(e) {
var beforedecimal=5;
var afterDecimal=4;
var t = e.value;
var n = t.includes(".");
if(n== true){
e.maxLength = 15;
e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf(".")) + t.substr(t.indexOf("."), afterDecimal)) : t;
}else if(n == false){
var a=t.length;
e.maxLength = beforedecimal;
if(a>=beforedecimal){
if(event.keyCode == 46){
e.maxLength = beforedecimal+1;
}
}
}
}
_
<input type="text" id="resultText" onkeypress="validate(this)" />