2013-03-27 99 views
1

这真的让我感到一个循环。 当我的validateForm函数位于全局变量中时,我通过调用onsubmit="return validateForm()"成功验证了此表单,并用我的JavaScript验证了该函数。不幸的是,一旦我开始尝试调试IE8,我一直得到错误,对具有全局变量,我决定把它全局函数,而不是...onsubmit返回validateForm不触发

现在,我似乎无法得到它在所有触发。 -_-

(而且是啊,从来实际测试中它的前缀,以确保它是不冲突,由于是全球性的。)

从我所知道的,我做的缩影一个基本的形式。这种方法是w3schools上显示的方法,它适用于他们,所以...什么给了?

我的形式:

<form name="emailus" id="emailus" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="return validateForm()"> 
    <a href="mailto:[email protected]"> 
     <h3><i class="icon-envelope-alt icon-large"></i>Send us an email<span>: [email protected]</span></h3> 
    </a> 

    <div class="half"> 
     <fieldset class="name"> 
      <label for="cf_name">Name <span>*</span></label> 
      <input type="text" id="cf_name" name="cf_name" class="textualformfield" placeholder="Jane Doe" pattern="^[a-zA-Z'\s]+$"> 
     </fieldset> 
     <fieldset class="emailaddress"> 
      <label for="cf_email">E-mail <span>*</span></label> 
      <input type="text" id="cf_email" name="cf_email" class="textualformfield" placeholder="[email protected]" pattern="[a-z0-9!#$%\x26'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%\x26'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b"> 
     </fieldset> 
     <fieldset class="phonenumber"> 
      <label for="cf_phonenumber">Phone</label> 
      <input type="tel" id="cf_phonenumber" name="cf_phonenumber" class="textualformfield" placeholder="555-555-5555"> 
     </fieldset> 
     <fieldset class="eventdate"> 
      <label for="cf_eventdate">Event Date</label> 
      <input type="text" id="cf_eventdate" name="cf_eventdate" class="textualformfield" placeholder="May 25th, 2012"> 
     </fieldset> 
     <fieldset class="location"> 
      <label for="cf_location">Location</label> 
      <input type="text" id="cf_location" name="cf_location" class="textualformfield" placeholder="The Church"> 
     </fieldset> 
    </div> 

    <div class="half"> 
     <textarea name="cf_message" class="textualformfield" placeholder="Your Message"></textarea> 
    </div> 

    <input type="submit" name="submit" id="submit" value="Submit"> 
</form> 

我的JavaScript函数,位于的(document).ready之外,使其应该能够被称为:

function validateForm() { 
    window.alert("I'm activating!"); 
    var valid = true; 

    jQuery('p.validationhelpers').remove(); 

    if (document.emailus.cf_email.value === '') { 
     jQuery('.emailaddress').append("<p class='validationhelpers'>Please enter an email address.</p>"); 
     jQuery('.emailaddress>input').focus(); 
     valid = false; 
    } 

    if (document.emailus.cf_name.value === '') { 
     jQuery('.name').append("<p class='validationhelpers'>Please enter your name.</p>"); 
     jQuery('.name>input').focus(); 
     valid = false; 
    } 

    return valid; 
} 

相反,它只是提交... 我觉得这是一个愚蠢的问题。我已经尝试用return validateForm();return false; return validateForm()(确实返回了错误并阻止提交),return validateForm(); return false();validateForm()validateForm();替换onsubmit的内容。

> _ <

SOLUTION: bjornarvh找到了真正的原因,从调试现场实际。我在此突出显示它,因为真正的答案是,标记为已解决答案的评论

原来我在javascript中遗漏了我的一个函数的右括号,这导致validateForm函数被封装在(document).ready之内,这使onsubmit无法访问。意外范围问题!

回答

2

JavaScript是大小写敏感的,所以你需要添加的

onsubmit="return ValidateForm()" 

代替

onsubmit="return validateForm()" 
+0

啊,废话。我很抱歉 - 我搞砸了复制/粘贴,因为我删除了发布示例的前缀。但实际的代码没有这个问题。案件是相同的。 – aminimalanimal 2013-03-27 09:36:08

+0

我在本地尝试了代码,它似乎按预期工作。我可以尝试去调试你的网站,但是我得到了一个“Womp Womp”,我们可能几乎肯定会打破这个页面,快速帮助我们吧?当我去“联系”@aminimalanimal – bjornarvh 2013-03-27 09:49:03

+0

它不应该让你去联系。点击联系人/信息应该覆盖当前页面顶部的表单...如果这就是你正在做的事情,它让你点击/联系,你在哪个浏览器? @bjornarvh – aminimalanimal 2013-03-27 10:15:48