【问题标题】:Do not submit form before jquery validate is okay在 jquery validate 可以之前不要提交表单
【发布时间】:2016-05-05 15:03:38
【问题描述】:

我正在寻找一种方法,以便我的FormMethod.Post 在完成 jquery 验证之前不提交。我已经尝试过使按钮位于disabled,然后在keydown 上删除禁用,如果表单没问题的话。但这不起作用,也不安全。我能做什么?

HTML

@using (Html.BeginForm("_Kontakt", "Home", FormMethod.Post))
{
<div class="row">
    <div class="col-sm-6">
        <div class="col-sm-12">
            <b>Facebook Url</b>
            <input id="FacebookUrl" name="FacebookUrl" type="text" class="form-control" />
        </div>
        <div class="col-sm-12">
            <b>Steam Url</b>
            <input id="SteamUrl" name="SteamUrl" type="text" class="form-control" />
        </div>

        <div class="col-sm-12">
            <button id="SendBtn" class="btn btn-success pull-right" onclick="return validateUrl();">Send</button>
        </div>
    </div>
</div>
}

Jquery/Javascript

function validateUrl() {
    facebookURL = $("#FacebookUrl").val();
    steamURL = $("#SteamUrl").val();
    var facebook = /^(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*)?$/;
    var steam = /(?:https?:\/\/)?steamcommunity\.com\/(?:profiles|id)\/[a-zA-Z0-9]+/;
    if (facebook.test(facebookURL)) {
    }
    else {
        alert("Ikke et facebook gyldigt url!");
    }
    if (steam.test(steamURL)) {
    }
    else {
        alert("Ikke et steam gyldigt url!");
    }
    return facebook.test(facebookURL);
    return steam.test(steamURL);
}

回答

return facebook.test(facebookURL) && steam.test(steamURL);

【问题讨论】:

  • return 可以在函数中调用一次。之后函数执行结束。你的意思是:return facebook.test(facebookURL) && steam.test(steamURL);
  • 非常感谢@Striker 帮助!
  • Jquery form validation的可能重复

标签: javascript jquery asp.net-mvc forms post


【解决方案1】:

有一个“onsubmit”事件可以让你控制表单提交http://www.w3schools.com/tags/ev_onsubmit.asp

【讨论】:

  • 没有用,我关注了“Strikers”的评论,并且有效:)
  • 使用“onsubmit="validateUrl()"> 不起作用,它仍然提交表单,因为我有 2 个返回值:)
【解决方案2】:

如果您将输入和按钮放在表单元素中,并将patternrequired 属性与:invalid 选择器结合使用,则浏览器可以为您进行验证:

/* Add the .focused class when the user focuses
an input to only show the error message once */
$("#the-form input").focus(function(){
  this.classList.add("focused");
});
.input-error-message {
  color: red;
}

/* Show elements with the class .input-error-message
if they come after an input with invalid data if the
user isn't typing or if it has not been focused yet */
:invalid:not(:focus).focused + .input-error-message {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row">
    <form class="col-sm-6" id="the-form" onsubmit="return isValid()">
        <div class="col-sm-12">
            <b>Facebook Url</b>
            <input id="FacebookUrl" name="FacebookUrl" type="text" class="form-control" pattern="^(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*)?$" required/>
            <div class="input-error-message" hidden>Ikke et facebook gyldigt url!</div>
        </div>
        <div class="col-sm-12">
            <b>Steam Url</b>
            <input id="SteamUrl" name="SteamUrl" type="text" class="form-control" pattern="(?:https?:\/\/)?steamcommunity\.com\/(?:profiles|id)\/[a-zA-Z0-9]+" required/>
            <div class="input-error-message" hidden>Ikke et steam gyldigt url!</div>
        </div>

        <div class="col-sm-12">
            <button id="SendBtn" class="btn btn-success pull-right">Send</button>
        </div>
    </form>
</div>

【讨论】:

  • 不是我要找的答案,但非常感谢您告诉我!我看到我可以用更少的代码来做到这一点:)
  • 这在现代浏览器中效果很好,但如果您需要支持旧浏览器,我会推荐您的解决方案。
猜你喜欢
  • 2023-04-02
  • 2016-09-23
  • 1970-01-01
  • 2013-12-28
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多