【问题标题】:onsubmit return validateForm isn't triggeringonsubmit return validateForm 没有触发
【发布时间】:2013-03-27 09:14:35
【问题描述】:

这真的让我陷入了困境。 当我的validateForm 函数位于全局变量中时,我通过调用onsubmit="return validateForm()" 成功地使用我的javascript 验证了此表单。不幸的是,一旦我开始尝试调试 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;
}

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

>_

解决方案: bjornarvh 通过调试实际站点找到了真正的原因。我在这里强调它是因为真正的答案是在标记为已解决的答案的 cmets 内

原来我在 javascript 中的一个函数缺少右括号,这导致 validateForm 函数被包裹在 (document).ready 中,这使得 onsubmit 无法访问它。意外范围问题!

【问题讨论】:

    标签: javascript html forms validation scope


    【解决方案1】:

    JavaScript 区分大小写,所以需要添加

    onsubmit="return ValidateForm()"
    

    而不是

    onsubmit="return validateForm()"
    

    【讨论】:

    • 啊,废话。对不起——我搞砸了复制/粘贴,因为我删除了发布示例的前缀。不过,实际代码没有这个问题。情况相同。
    • 我在本地尝试了代码,它似乎按预期工作。我可以尝试调试您的网站,但我得到一个“Womp Womp。我们可能几乎肯定破坏了这个页面。快帮我们解决?”当我去“联系”@aminimalanimal
    • 根本不应该让你去联系。单击 /info 中的联系人应该会覆盖当前页面顶部的表单...如果这就是您正在做的并且它让您单击进入 /contact,那么您在哪个浏览器中? @bjornarvh
    • @aminimalanimal 在 Opera、Chrome 和 IE10 中尝试过
    • O_o 好的,几分钟前,我添加了一个 IE8 告诉我我需要的右括号(我找不到任何需要),然后在 Chrome (Mac) 中单击“联系人”进行测试, Safari、Firefox 和 IE8 (Windows XP VirtualBox)。所有人都成功地显示了联系表格覆盖......所以除非缺少那个支架是什么让你打破它,我不知道那里发生了什么。再试一次?
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2019-12-14
    • 2021-07-28
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多