onsubmit返回validateForm没有触发

时间:2013-03-27 09:14:35

标签: javascript html forms validation scope

这真的让我陷入了困境。 当我的onsubmit="return validateForm()"函数在全局变量中时,我通过调用validateForm成功验证了此表单。不幸的是,一旦我开始尝试调试IE8,我就会因为拥有一个全局变量而遇到错误而我决定将它变成一个全局函数...

现在我似乎无法触发它。 -_-

(是的 - 我实际上已经将它作为测试的前缀,以确保它不会因全球化而发生冲突。)

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

我的表格:

<form name="emailus" id="emailus" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="return validateForm()">
    <a href="mailto:example@email.com">
        <h3><i class="icon-envelope-alt icon-large"></i>Send us an email<span>: example@email.com</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="janedoe@email.com" 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;
}

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

&GT; _&LT;

解决方案: bjornarvh找到了调试实际网站的真正原因。我在这里突出显示它是因为真正的答案是在标记为已解决的答案的范围内。

原来我错过了javascript中某个函数的结束括号,这导致validateForm();函数被包含在validateForm中,这使得(document).ready无法访问它。意外范围问题!

1 个答案:

答案 0 :(得分:2)

JavaScript区分大小写,因此您需要添加

onsubmit="return ValidateForm()"

而不是

onsubmit="return validateForm()"