如何阻止用户在一行中插入多个换行符到文本字段? 我更喜欢使用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;
}
}
});
答案 0 :(得分:3)
我想出了这个:
新增和改进(可以定义允许的换行数)
<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;
}
答案 1 :(得分: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函数之外才能正常工作,var code
应该在顶部,检查enter键只有一次,因为第二次检查不是真的有必要。
code
变量实际上是可选的,因为jQuery应该标准化e.which
,但检查是否支持keycode
或which
似乎是一个好主意,以确保跨浏览器兼容性。
检查#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
的函数或变量。
答案 2 :(得分:1)
$("#myTarea").keydown(function(e) {
if(e.keyCode == 13) {
if($(this).val().match(/\n/)) e.preventDefault();
}
});
<textarea id="myTarea" rows="5"></textarea>
答案 3 :(得分:0)
解决方案的关键是,一旦检测到页面上至少有一个\n
字符,就会阻止插入回车\n
的默认行为。
在传递给按键处理程序的event
对象中,使用“which”方法检查输入键“keypress”事件,该事件由数字13表示。如果按下该键,请检查用于回车的textarea的全部内容,再次由转义序列\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();
}
});