javascript
  • nested
  • if-statement
  • 2011-11-02 155 views 3 likes 
    3

    我希望能够做的就是每次用户在输入字段中输入新字符时验证电子邮件。当输入字段为空时,它不应该显示任何内容,但当它包含字母时,它应该显示无效字符的位置。为什么我的嵌套if和else语句不起作用?

    我的代码工作,但输入字段为空时不显示任何内容,因为它使用嵌套的'else'而不是它应该使用的。有人帮忙吗?提前致谢。 andyy

    var tick = "<img src='images/tick.png' width='20' height='20'/>"; 
    var cross = "<img src='images/cross.png' width='20' height='20'/>"; 
    var email_element = document.contact_form.email_field.value; 
    function validate_email(id) { 
        if (email_element != '') { 
         var letters = /^[A-Za-z]+$/; 
         if (document.contact_form.email_field.value.match(letters)) 
         { 
          document.getElementById(id).innerHTML = tick; 
           valid = true; 
         } else { 
          document.getElementById(id).innerHTML = cross; 
          valid = false; 
         } 
        } else { 
         document.getElementById(id).innerHTML = ''; 
        } 
        return valid; 
    } 
    
    +0

    什么是'email_element'?你不应该测试'document.contact_form.email_field.value'吗? – LukeH

    +0

    Web控制台是否显示任何错误? – CountMurphy

    +0

    o yh抱歉哈哈忘了包括它var email_element = document.contact_form.email_field.value; –

    回答

    3

    问题是最有可能这一行:

    var email_element = document.contact_form.email_field.value; 
    

    您分配一个全局变量等于电子邮件字段的值,然后再也没有更新该变量。这不会创建一个到该字段当前值的“活动”链接,它只会存储该行执行时的值。这又意味着函数if (email_element != '')中的第一个if声明正在评估电子邮件字段的非当前值。

    将该行移动到内部您的函数,然后每次函数运行时您都将获得该字段的最新(当前)值。

    编辑:另外,你没有分配一个值到valid在非嵌套的其他。您应该在函数中声明valid作为局部变量,并确保在每个if和else分支中适当地设置它(或者在声明时将其默认为false)。因为thomasrutter 表示你目前没有在你的函数中声明validvar声明,这意味着它将被创建为一个全局变量,这反过来意味着当你不给它一个非嵌套的值时else函数将返回先前调用中已有的任何值valid。 (真的,根据您发布的代码,你不需要valid变量都:你还是说return true;return false;直接您的if/else结构的每个分支内。)

    2

    尝试更换表达email_element != ''document.contact_form.email_field.value != '',因为我怀疑email_element是一个元素的引用,永远不会等于''。更妙的是,创建一个局部变量email_value并指定其为document.contact_form.email_field.value价值,并在这两个地方在使用它,

    function validate_email(id) { 
        var email_value = document.contact_form.email_field.value; 
        if (email_value != '') {   
        var letters = /^[A-Za-z]+$/; 
        if (email_value.match(letters)) { 
         document.getElementById(id).innerHTML = tick; 
         valid = true; 
        } 
        else { 
         document.getElementById(id).innerHTML = cross; 
         valid = false; 
        } 
        } 
        else { 
        document.getElementById(id).innerHTML = ''; 
        } 
        return valid; 
    } 
    
    +0

    不错的一个大声笑我刚取代它,它的工作,谢谢! –

    2

    当设置email_element,你曾经所获得的价值,通过复制,因为它是一个字符串。因此,如果在页面加载该字段为空白时,email_element现在设置为“”并保持设置为止,直到您再次设置为止。

    标签作为参考设定,所以你可能是打算是:

    var email_element = document.contact_form.email_field; 
    . . . 
    if(email_element.value != '') 
    
    相关问题