1

テキストエリアに関連するオプションが選択されているときに、行と行ごとの文字を制限したいテキストエリアを持つ Drupal Web フォームがあります。

たとえば、ユーザーがオプション A を選択した場合、テキストエリアは 2 行に制限し、1 行あたり 14 文字に制限する必要があります。オプション B、3 行、18 文字。などなど。

javascript コールバックのテキストエリアに属性を追加するために hook_form_alter を介して Web フォームとやり取りすることができないようです。それが私の最初の問題だと思います。しかし、jQueryでそれを行うことができました。

$(document).ready(function() {

$('#mytext').keyup(function() {
    var v = $(this).val();
    var vl = v.replace(/(\r\n|\n|\r)/gm, "").length;
    if (vl == 0) {
        count = 1;
    }
    if (parseInt(vl / count) == chars) {
        $(this).val(v + '\n');
        count++;
    }

    if (count > 3) {
       var text = $('#mytext').val();
       var lines = text.split('\n');

       var test = implode('\n', lines);
        alert(test);
    }

});
});

また、行数と行ごとの文字数をカウントし、制限に達した場合に入力を禁止するにはどうすればよいですか?

上記の一部はこちらからお借りしました。

1 行あたりの文字数とテキストエリアあたりの行数の制限

4

2 に答える 2

2

これにより、textareaは1行あたり3文字に制限されます。chars1行あたりの文字数を増やすように変更します。

var count = 1;
var chars = 3;
$('#mytext').keyup(function() {
    var v = $(this).val();
    var vl = v.replace(/(\r\n|\n|\r)/gm, "").length;
    if (vl == 0) {
        count = 1
    }
    if (parseInt(vl / count) == chars) {
        $(this).val(v + '\n');
        count++;
    }

});

http://jsfiddle.net/7jVrT/で実例を確認してください

于 2011-04-11T20:30:54.720 に答える
0

これは正確には正しい JavaScript ではありませんが、良いスタートが切れると思います。行 1 のロジックを行 2 のロジックから分離するなど、ロジックを実際に調整する必要があります。また、event.which を使用して、どのキーが押されたかを把握することもできます。また、keypress イベントの代わりに、文字がテキストエリアに入力される前に発生する keydown イベントを使用してみることができます。

$(document).ready(function(){
    $('#myTextarea').keypress(function(event){
        var text = $('#myTextarea').val();
        var lines = text.split('\n');

        for (var lineIndex in lines) {
            if (lines[lineIndex].length > 10) {
                event.preventDefault();
                return;
            }
        }

        if (lines.length > 2) {
            event.preventDefault();
            return;
        }
    });
});
于 2011-04-11T20:36:15.110 に答える