4

エンターキーが押されないようにするこのjQueryがあり、許可されていないキー押下の配列を受け入れるように準備しました。

    $('.form input').bind('keypress', function(e) {
        var keys = [13];
        for (var i = keys.length; i--;){
            if(e.keyCode===keys[i]){
                return false;
            }
        }
    });

キャラクターについても同様のことをしたいのです|が、220のシフトであり、フォームへの入力を停止する必要がないので\、そのキャラクターを制限したり、修飾キーを使用したりするにはどうすればよいですか?(もちろん、サーバー側でも処理されます)。

また、特殊文字のキーボードレイアウトは、ローカリゼーションが異なるキーボードごとに異なる可能性があることも認識しています。そのため、キー自体ではなく、結果の文字に焦点を当てる必要がある場合があります(完全にはわかりません)が、私はしません。大量のオーバーヘッドを導入したい

4

5 に答える 5

6

keypressイベントは、キーではなく、キャラクターに関するものです( )keyCodeの文字コードと直接比較するだけで、Shiftキーが押されていることを心配する必要はありません(すべてのキーボードにあるとは限りません)。"|""|".charCodeAt(0)

例-ライブコピー| ソース

HTML:

<p>Try to type | in the box below.</p>
<input id="theInput" type="text" size="80">

JavaScript:

jQuery(function($) {

  var keys = [13, "|".charCodeAt(0)];
  $("#theInput").keypress(function(e) {
    var index;

    for (index = 0; index < keys.length; ++index) {
      if (keys[index] === e.keyCode) {
        display("Denied!");
        return false;
      }
    }
  });

  function display(msg) {
    $("<p>").html(msg).appendTo(document.body);
  }
});

または、bažmegakapaが指摘しているように、すでにjQueryを使用しているので、そのinArray関数を使用できます。

jQuery(function($) {

  var keys = [13, "|".charCodeAt(0)];
  $("#theInput").keypress(function(e) {
    if ($.inArray(e.keyCode, keys) !== -1) {
      display("Denied!");
      return false;
    }
  });

  function display(msg) {
    $("<p>").html(msg).appendTo(document.body);
  }
});
于 2012-05-01T14:25:39.983 に答える
4

パイプのキーコードは次の124とおりです。これは単純に機能するはずです。

$('.form input').bind('keypress', function(e) {
    var keys = [13, 124];
    for (var i = keys.length; i--;){
        if(e.keyCode===keys[i]){
            return false;
        }
    }
});​

デモをチェックしてください

とにかくjQueryを使用している場合は、次のinArray()メソッドを使用できます。

$('.form input').bind('keypress', function(e) {
    var keys = [
        13, // enter
        124 // |
    ];
    return $.inArray(e.keyCode, keys) === -1;
});​
于 2012-05-01T14:27:53.763 に答える
0

結論として、これまでで最高の解決策は次のとおりです。

var keys = [13, "|".charCodeAt(0)];
$(".form input").keypress(function(e) {
    return $.inArray(e.keyCode, keys) === -1;
});
于 2012-05-01T14:24:10.247 に答える
-2

trueかどうかを確認できe.shiftKeyますが、その場合は配列を変更する必要があります。個人的には次のようなものを使用します:

var mod = {
    NONE:0,
    SHIFT:1,
    CTRL:2,
    ALT:4
};
var keys = [
    [13,mod.NONE], // enter, no mod
    [220,mod.SHIFT] // \ with Shift = |
];
for( var i=keys.length; i--;) {
    if( e.keyCode === keys[i][0] && (e.shiftKey + 2*e.ctrlKey + 4*e.altKey) === keys[i][1]) {
        return false;
    }
}
于 2012-05-01T14:21:47.987 に答える
-2

特定の文字(または文字のセット)を含めないようにしたいだけの場合は、フォームの値から制限された文字を削除するのがより良い方法だと思います。

$('.form input').keyup(function(e){ $(this).val( $(this).val().replace("|", "" ) ); });

于 2012-05-01T14:30:01.430 に答える