我有以下Javascript / jQuery:
$('#List').keypress(function (e) {
if (e.which == 13) {
var lines = $('#List').val().split('\n');
mylast = lines[lines.length - 1];
mylen = mylast.length;
if ((mylen != 8) || (mylen != 4)) {
lines = lines.slice(lines.length-1);
$('#List').val(lines.join("\n"));
alert(mylen);
return false;
}
return true;
}
});
但即使长度为4或8,它也会跳入代码块....
我的错误在哪里?
我想删除textarea的最后一行,如果它不是给定的长度。
答案 0 :(得分:2)
不应该是:
if ((mylen != 8) || (mylen != 4)) {
它应该是:
if ((mylen != 8) && (mylen != 4)) {
你的方式,如果它是8,它不是4所以它通过或如果它是4它不是8.你需要检查它不是
答案 1 :(得分:0)
这一行:
if ((mylen != 8) || (mylen != 4)) {
表示“如果长度不是8 或长度不是4”。因此,例如,4不是8,因此条件为真(第二部分从未经过测试,因为JavaScript表达式被短路)。类似地,如果它是8,表达式的第一部分是假,但第二部分(8!= 4)是真的,因此表达式为真。
你可能想要:
if ((mylen != 8) && (mylen != 4)) {
&&
表示“和。”
答案 2 :(得分:0)
让我们检查一下mylen
是4
的情况。
mylen != 8 //true
mylen != 4 //false
true || false // true
您可能希望阻止mylen
和 阻止8
成为mylen
4
:
(mylen != 8) && (mylen != 4)
答案 3 :(得分:0)
FWIW,这是一个更好的代码版本:
$('#List').keypress(function (e) {
var lines, last, valid;
if (e.which === 13) {
lines = $(this).val().split('\n');
last = lines.pop();
valid = last.length === 4 || last.length === 8;
if (!valid) {
$(this).val(lines.join("\n"));
e.preventDefault();
}
}
});
var
关键字!)$(this)
而不是重复$('#List')
e.preventDefault()
而不是返回false
valid
的变量来传达更清晰的含义===
)submit
事件处理程序而不是捕获Enter键。