Javascript if子句工作不正常
我有以下Javascript/jQuery:Javascript if子句工作不正常,javascript,if-statement,Javascript,If Statement,我有以下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 = line
$('#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,它也会跳入代码块
我的错误在哪里
如果文本区域的最后一行不是给定长度,我想删除它。它不应该是:
if ((mylen != 8) || (mylen != 4)) {
应该是:
if ((mylen != 8) && (mylen != 4)) {
你的方式如果是8,它不是4,所以它通过了,或者如果是4,它不是8。您需要检查它是否不是这一行:
if ((mylen != 8) || (mylen != 4)) {
表示“如果长度不是8或长度不是4”。例如,4不是8,所以条件为true(第二部分从不测试,因为JavaScript表达式短路)。类似地,如果是8,则表达式的第一部分为false,但第二部分(8!=4)为true,因此表达式为true
您可能想要:
if ((mylen != 8) && (mylen != 4)) {
&&
表示“和”。让我们检查一下mylen
是4
时的情况
mylen != 8 //true
mylen != 4 //false
true || false // true
您可能想要阻止mylen
成为8
和阻止mylen
成为4
:
(mylen != 8) && (mylen != 4)
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
- 它使用严格的比较(
)==
- 如果代码是表单有效性检查的一部分,请考虑将其放入<代码>提交事件处理程序中,而不是捕获Enter键。
||
替换为&
(mylen!=8)| |(mylen!=4)
对于mylen
的每个可能值都是正确的。没问题,休息5分钟。别忘了给最上面的答案打分,需要我15分哈