2013-05-01 78 views
1

我试图获取它,以便如果键入以空格结尾的名称,文本字段将变为红色。大部分的代码工作只有一个方法似乎没有工作。确保输入的名称不以空格结尾

该问题必须在最后一个索引部分的某处?

var NamePass = true; 

function ValidateName() { 
    var BlankPass = true; 
    var GreaterThan6Pass = true; 
    var FirstBlankPass = true; 
    var BlankMiddleName = true; 

    if (document.getElementById('Name').value == "") { 
     BlankPass = false; 
    } 

    var Size = document.getElementById('Name').value.length; 
    console.log("Size = " + Size); 

    if (Size < 7) { 
     GreaterThan6Pass = false; 
    } 

    if (document.getElementById('Name').value.substring(0, 1) == " ") { 
     FirstBlankPass = false; 
    } 

    var LastIndex = document.getElementById('Name').value.lastIndexOf(); 

    if (document.getElementById('Name').value.substring((LastIndex - 1), 1) == " ") { 
     FirstBlankPass = false; 
    } 

    string = document.getElementById('Name').value; 
    chars = string.split(' '); 
    if (chars.length > 1) {} else 
     BlankMiddleName = false; 

    if (BlankPass == false || GreaterThan6Pass == false || FirstBlankPass == false || BlankMiddleName == false) { 
     console.log("BlankPass = " + BlankPass); 
     console.log("GreaterThan6Pass = " + GreaterThan6Pass); 
     console.log("FirstBlankPass = " + FirstBlankPass); 
     console.log("BlankMiddleName = " + BlankMiddleName); 
     NamePass = false; 
     document.getElementById('Name').style.background = "red"; 
    } else { 
     document.getElementById('Name').style.background = "white"; 
    } 
} 

http://jsfiddle.net/UTtxA/10/

+0

请确保缩进您的代码!如果你还可以尝试提供一个更好地描述你的问题的标题,那将是非常感谢。 – Ryan 2013-05-01 23:34:38

+0

“它只是一种方法似乎不起作用。”你能详细说明一下吗? – placeybordeaux 2013-05-01 23:36:36

+1

那么究竟哪部分完全无法按预期工作呢?顺便说一句,请存储'document.getElementById('Name')'和它的值在变量! – Bergi 2013-05-01 23:37:12

回答

3

lastIndexOf得到一个字符,而不是在一个字符串的最后一个索引的最后一个索引。我想你的意思是使用length代替:

var lastIndex = document.getElementById('Name').value.length;

与另一个问题,虽然是substring需要一个开始和结束索引,而不是开始索引和子串的长度。你可以使用substr代替,但charAt容易:

if (document.getElementById('Name').value.charAt(lastIndex - 1) == " ") { 
    FirstBlankPass = false; 
}

现在,对于一些通用代码的改进。相反,与true你所有的变量开始,有条件将它们设置为false的,只需将它们设置为条件:

var NamePass = true; 

function ValidateName() { 
    var value = document.getElementById('Name').value; 

    var BlankPass = value == ""; 
    var GreaterThan6Pass = value.length > 6; 
    var FirstBlankPass = value.charAt(0) == " "; 
    var LastBlankPass = value.charAt(value.length - 1) == " "; 
    var BlankMiddleName = value.split(" ").length <= 1; 

    if (BlankPass || GreaterThan6Pass || FirstBlankPass || LastBlankPass || BlankMiddleName) { 
     console.log("BlankPass = " + BlankPass); 
     console.log("GreaterThan6Pass = " + GreaterThan6Pass); 
     console.log("FirstBlankPass = " + FirstBlankPass); 
     console.log("BlankMiddleName = " + BlankMiddleName); 
     NamePass = false; 
     document.getElementById('Name').style.background = "red"; 
    } else { 
     document.getElementById('Name').style.background = "white"; 
    } 
} 

一对夫妇更注意点:

  • 它可能使用一个好主意camelCase变量名,而不是PascalCase的,后者通常被保留用于构造
  • blah == false确实应该写成!blah
  • if后跟else也可以用if (!someCondition)
  • 这个函数来代替看起来像它应该返回truefalse,未设置全局变量NamePass

Penultimately,您可以在总结这一切起来一个正则表达式,但如果您打算根据实际错误向用户提供更具体的错误消息,那么我不会那样做。

function validateName() { 
    return /^(?=.{6})(\S+(\s|$)){2,}$/.test(document.getElementById('name').value); 
} 

最后 - 请记住,不是每个人都有一个中间名,甚至名称超过6个字符,如@poke指出。

+0

哇,我觉得像iv'e第一次再次发现类。你花时间解释它并展示如何改进。现在知道你可以从html中获得价值,并且能够更好地理解它。谢谢! – Steven 2013-05-01 23:52:48

+0

我试图让它'nnnb nnnn'将被接受。前面的空间是不允许的,后面是一样的。但是,对于返回方法,您必须在名称 – Steven 2013-05-01 23:57:23

+0

中有一个地方,像这样? http://jsfiddle.net/UTtxA/12/ – Steven 2013-05-02 00:00:14

相关问题