1

I have a Drupal webform with a textarea that I would like to limit the line and character per line when a option is selected, related to the textarea.

例如,用户选择选项 A,文本区域应限制为 2 行,每行 14 个字符。选项 B,3 行,18 个字符。等等等等。

我似乎无法通过 hook_form_alter 与 webform 交互以将属性添加到 textarea 以用于 javascript 回调。我认为这是我的第一个问题。然而,我可以用 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);
    }

});
});

另外,如何计算每行的行数和字符数,并在满足限制时防止任何输入?

我从这里借用了上面的部分内容:

每行字符数和每 textarea 行数限制

4

2 回答 2

2

这会将 textarea 限制为每行 3 个字符。更改chars以增加每行的字符数。

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 回答