javascript
  • jquery
  • 2016-11-16 4 views 2 likes 
    2

    文字列を貼り付けることができないようにしたい(。| ")キーボードのキーに関する研究を行っていましたが、ユーザータイプのときに機能しますが、どうやって貼り付けを防止しますか?JQueryのonpasteイベントは、| 、。/

    ここ

    はここTesting here

    jsfiddleである私のJavaスクリプトは、あなたが以下のようにbindとともにsetTimeoutを使用して、正規表現を使って文字を削除することができます

    $("[name='search']").on({ 
    keydown: function(e) { 
        if (e.which === 32 || e.which === 220) { 
         e.preventDefault(); 
         var v = this.value, 
          s = this.selectionStart; 
         this.value = v.substr(0, s) + '' + v.substr(s, v.length); 
        } 
        if (e.which === 55) { 
         e.preventDefault(); 
         var v = this.value, 
          s = this.selectionStart; 
         this.value = v.substr(0, s) + '7' + v.substr(s, v.length); 
        } 
    }, 
    
    
    // Here is the paste function but i no sure how to write it 
    
    paste: function(e) { 
        var s = this; 
        setTimeout(function() { 
         // here i no sure how to do it 
        }); 
        } 
    }); 
    
    +0

    正規表現 'onInputChange'を実行することがあります。 –

    +2

    特定の文字をチェックする方法や文字列から特定の文字を削除する方法を調べることは難しくない – charlietfl

    +0

    ['on()'](http://api.jquery.com/on/)の使い方についてはjQueryのドキュメントを読むべきだと思います。 –

    答えて

    1

    です。

    $("[name='search']").on({ 
     
        keydown: function(e) { 
     
         if (e.which === 32 || e.which === 220) { 
     
          e.preventDefault(); 
     
          var v = this.value, 
     
           s = this.selectionStart; 
     
          this.value = v.substr(0, s) + '' + v.substr(s, v.length); 
     
         } 
     
         if (e.which === 55) { 
     
          e.preventDefault(); 
     
          var v = this.value, 
     
           s = this.selectionStart; 
     
          this.value = v.substr(0, s) + '7' + v.substr(s, v.length); 
     
         } 
     
        }, 
     
        
     
        paste: function(e) { 
     
         var stopPaste = function(){ 
     
          this.value = this.value.replace(/[|\s]/g, ''); 
     
         }; 
     
             
     
         setTimeout(stopPaste.bind(this), 1); 
     
        } 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <div><span>Search: </span><input type="text" name="search" size="75" /></div>

    +0

    もう1つ質問がありますか?どのように私はスペースを削除するのですか? – nonstop328

    +1

    私はコードを更新しました。 – Aruna

    +1

    空白の文字列とスペースにスペースを入れ替える単一の文字列を置き換えます。例:helloiamhere 2番目のregexp str.replace(/ [\ s +]/g、 );複数のスペースを1つのスペースに置き換える –

    3

    必須注:あなたには、いくつかのクライアント側の検証をしようとしているようです。私が答えを出す前に、クライアント側の検証は、特にセキュリティが関与している場合には、非常に信頼できるものではないことを指摘します。詳細は質問why is client-side validation not enough?を参照してください。不適切な文字が入力されないようにするには、サーバー側で行う必要があります。

    と言われていますが、クライアント側のチェックは便利で、ユーザーの時間を節約できます。これを行う最も信頼性の高い方法は、test()と単純なregular expressionです。 testifとし、それをreplace()を使用して問題の値を除去することができます。あなたの元のコードと相まって

    、それは少し次のようになります。

    function check(e){ 
        var expression = new RegExp(/[\.\|]/, "g"); 
        if (expression.test(e.target.value)){ 
         e.target.value = e.target.value.replace(expression, "") 
        } 
    } 
    

    そして、あなたはあなたの$("[name='search']").on({セクション内の適切な場所からその関数を呼び出すことができます。また、式は任意の正規表現でもよく、任意の文字や組み合わせ文字を確認することができます。 Regex is power

    2行目から5行目を貼り付けた関数に貼り付けても、SafariとChromeでテストしたところ、貼り付けたものと貼り付けた後のcheck()関数を呼び出すのが最善の方法ですブラーイベント。これは、入力に貼り付けても変更イベントが必ずしも発生しないためです。試してもエラーもありますが、.on()のjQueryドキュメントには詳細がいくつかあります。このことができます

    function check(e){ 
        var expression = new RegExp(/[\.\|]/, "g"); 
        if (expression.test(e.target.value)){ 
         e.target.value = e.target.value.replace(expression, "") 
        } 
    } 
    
    $("[name='search']").on({ 
        keydown: function(e) {...}, 
        paste: function(e){ 
         check(e) 
        }, 
        blur: function(e){ 
         check(e) 
        } 
    }); 
    

    希望:

    は一緒にすべてのことを置く、私は次のようです!改善のための


    ヒント:私は個人的に、コードをより信頼性が高く、表現力豊かにする少しそれをクリーンアップし、潜在的に一般的に私のアプローチを再考するために、このビット以上に働くだろう。ただ、初心者のための:

    1. がエラーを投げてアウトストリッピングすべてのコンテンツを入力ボックスからだけではなく、問題のある文字を削除することを検討し「|」。 - 警告なしでユーザの入力を変更することは、一般に悪い動きです。通常はすべてを削除する方が良い。

    2. 特定の文字の入力を防止する部分を削除します。繰り返しますが、JSコンソールに関する知識を持っている人は、ハートビートでそれを回避することができ、それぞれのキーを押すだけでオーバーヘッドを追加するだけです。大きな問題ではありませんが、改善することができます。

    3. すべてのチェックロジックを1つの場所に配置し、すべての適切なイベントに対して実行するには、switch caseステートメントを使用します。あなたはjQueryイベントリスナーに気を取らなければならないでしょう。価値がないかもしれませんが、私がこのコードを書いていればそれを調べるでしょう。

    +0

    あなたの説明のために、私はこれを学ぼうとします – nonstop328

    +0

    動作するサンプルを追加できますか? – Aruna

    +0

    @Aruna元のコードの文脈で私が提供したサンプルは、読みやすさのために元のkeypressハンドラを切り捨てただけです。 – justin

    関連する問題