2

如何防止用户在一行中插入多个换行符到文本字段中?我更喜欢使用 jQuery 的解决方案。

更新 1:

我已将 anadeo 的代码插入到我的代码中,如下所示。不幸的是,它不起作用 - 它仍然允许在 textarea #posttext 中连续出现多个换行符。有人知道怎么修这个东西吗?谢谢 :)

//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

我想出了这个:

NEW AND IMPROVED(可以定义允许的换行数)

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(),这应该不是问题,但它假定您的 textarea 稍后插入到 DOM 中,并且从一开始就不存在,即。它是用JS等动态插入的。

其余的似乎没问题,但是last变量必须放在 keydown 函数之外才能正常工作,并且 varcode应该在顶部,只检查一次 enter 键,因为第二次检查并不是真正必要的。该code变量实际上是可选的,因为 jQuery 应该是 normalize e.which,但是检查是否支持keycodeorwhich似乎是确保跨浏览器兼容性的好主意。

对值的检查#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类似的名称可能是一个好主意MyLastTyped,这样不太可能与名称在其他地方或插件等中PostTextLast的函数或变量混淆。last

于 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

\n解决方案的关键是,一旦您检测到页面上至少有一个\n字符,就阻止插入回车的默认行为。

event传递给 keypress 处理程序的对象中,使用“which”方法检查输入键“keypress”事件,该事件由数字 13 表示。如果按下该键,则检查 textarea 的全部内容是否有回车return,它再次由转义序列表示\n。如果字符集合的长度\n大于 0,则调用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 回答