2

ユーザーがテキストフィールドに1行に複数の改行を挿入しないようにするにはどうすればよいですか?私はjQueryを使用したソリューションを好みます。

更新1:

次のようなanadeoのコードをコードに挿入しました。残念ながら、それは機能しません-それでも、textarea#posttextで1行に複数の改行を許可します。誰もがこれを修正する方法を知っていますか?ありがとう :)

//Post something
$('#postDiv').on('keydown', '#posttext', function(e) {
if (e.which==13 && !e.shiftKey && $('#posttext').val()!=' Post something...') {

    var last = false;

    var code = (e.keyCode ? e.keyCode : e.which);
    if(code == 13) {
        if (last) { e.preventDefault(); }
        last=true;
    }else{
        last=false;
    }

    //If not currently loading and enough text typed in, submit
    if($('#imageFeedback').html()!=' | Loading...' && $('#posttext').val().length>15){

        //Say that it is loading
        $('#imageFeedback').css('color','black').css('font-weight','normal').html(' | Loading...');

        //Call function to post
        post($(this));
        return false;
    }
}
});
4

4 に答える 4

3

私はこれを思いついた:

新規および改善(許可される改行の数を定義できます)

http://jsfiddle.net/cEzUx/6/

<textarea id="my" rows="5"></textarea>
<div id="out"> </div>

maxBreaks = 1;

$("#my").keydown(function(e) {
    if(e.keyCode == 13) {    
        if(countBreaks($("#my").val()) == maxBreaks) {
            e.preventDefault();
        }
    }
});

function countBreaks(str) {
  var num = 0;        
  for (var i = 0; i < str.length; i++) {
      if (str.charAt(i) === '\n') { num++; }
  }
  return num;
}
​
于 2012-05-07T23:43:35.203 に答える
2
$(textarea).on('keydown', function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if(code == 13 && this.value.match(/\n/g)) e.preventDefault();
});​

フィドル

...more than one line break in a row

次のように、複数の改行を (次々に) 回避することを考えていますか?

var last = false;

$(textarea).on('keydown', function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if(code == 13) {
        if (last) { e.preventDefault(); }
        last=true;
    }else{
        last=false;
    }
});​

フィドル

編集:

まず、on()jQuery 1.7 以降でのみサポートされているため、新しいバージョンのライブラリを使用していることを確認してください。

の委任バージョンも使用してon()いますが、これは問題にはなりませんが、テキストエリアが後で DOM に挿入され、最初から存在しないことを前提としています。JSなどで動的に挿入されます。

残りは問題ないようlastですが、適切に機能させるには、変数を keydown 関数の外に配置するcode必要があります。2 回目のチェックは実際には必要ないため、var を先頭に配置して、Enter キーのチェックを 1 回だけ実行する必要があります。codejQuery は を正規化することになっているため、この変数は実際にはオプションですが、またはがサポートさe.whichれているかどうかを確認することは、ブラウザー間の互換性を確保するための良い考えのようです。keycodewhich

値のチェックは#posttext一度だけ機能し、改行が入力されるとすぐに値はなくなり Post something...、「改行を制限する」機能が有効になりますか?

全体として、これはうまくいくはずだと思います。試してみてください。

var last = false;

$('#postDiv').on('keydown', '#posttext', function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code==13 && !e.shiftKey && $('#posttext').val()!=' Post something...') {
        if (last) { e.preventDefault(); }
        last=true;
    }else{
        last=false;
    }
});​

フィドル

また、他の場所やプラグインなどの名前を持つ関数や変数と混同される可能性が低い、などの代わりにlast、あまり一般的でない変数名を使用することをお勧めします。MyLastTypedPostTextLastlast

于 2012-05-08T00:03:25.443 に答える
1
$("#myTarea").keydown(function(e) {
    if(e.keyCode == 13) {
       if($(this).val().match(/\n/)) e.preventDefault();
    }
});

<textarea id="myTarea" rows="5"></textarea>

デモ。

于 2012-05-07T23:57:24.857 に答える
0

解決策の鍵は、ページに少なくとも 1 つの文字\nがあることを検出したら、キャリッジ リターンを挿入するというデフォルトの動作を防ぐことです。\n

keypress ハンドラーに渡されたeventオブジェクトで、「which」メソッドを使用して、数字 13 で表されるエンター キー「keypress」イベントをチェックします。そのキーが押された場合は、テキストエリアの内容全体でキャリッジをチェックします。これもエスケープ シーケンスで表されます\n。文字のコレクションの長さが\n0 より大きい場合は、を呼び出しevent.preventDefault()ます。これにより、Enter キーが textarea の value プロパティに追加されなくなります。

$('#wmd-input').keypress(function(event) {
    if(event.which == 13 && $('#wmd-input').val().match(/\n/g).length > 0) {
        event.preventDefault();
    }
});
于 2012-05-07T23:59:12.467 に答える