美文网首页让前端飞
解决js调用form的submit函数不进行输入检验的问题

解决js调用form的submit函数不进行输入检验的问题

作者: 王雨城 | 来源:发表于2017-07-21 14:22 被阅读0次

    博主最近被分配到写前端的任务,没写过…边学边写吧。今天遇到一个小问题,记录一下。
    问题描述:
    因为一些不可描述的原因,需要用 a 标签而不是button来进行表单的提交,我一开始是给 a 标签绑定点击事件,调用函数找到对应的form并调用submit函数进行提交。这样做的结果是,提交前没有进行验证。

    解决方案
    在页面新增一个隐藏的type=“submit”的button,点击 a 标签则调用函数找到这个button并调用它的click函数。


    html文件截取

       {% ifequal identity 'admin' %}
            <form role="form" action="{% url 'display:getResult_search_admin' %}" class="search_form">
        {% else %}
            <form role="form" action="{% url 'display:getResult_search_tourist' %}" class="search_form">
        {% endifequal %}
            <div class="form-group row" id="search-group">
                <div class="col-sm-5 col-sm-offset-3" id="div_input" >
                    <input type="text" name="search_text" class="form-control" id="searchtext" required oninvalid="setCustomValidity('请输入搜索内容')" oninput="setCustomValidity('')">
                    <input type="text" name="search_category" id="search_category" hidden>
                </div>
                <div class="col-sm-2" id="div_btn" >
                    <!--<button type="submit" class="btn btn-sm btn-primary btn-block" >搜索</button>-->
                    <div class="dropdown">
                      <button class="btn btn-primary dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
                        搜索
                        <span class="caret"></span>
                      </button>
                      <button type="submit" id="btn_submit" hidden></button>
                      <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
                        <li><a onclick="tosubmit('type')">类型</a></li>
                        <li><a onclick="tosubmit('brand')">品牌</a></li>
                        <li><a onclick="tosubmit('model')">型号</a></li>
                        <li><a onclick="tosubmit('fingerprint')">指纹</a></li>
                      </ul>
                    </div>
                </div>
            </div>
        {% ifequal identity 'admin' %}
            </form>
        {% else %}
            </form>
        {% endifequal %}
    

    可以看到以上代码中的第一个 input ,已经设置了require(该输入框不能为空),以及检测函数:

    <input type="text" name="search_text" class="form-control" id="searchtext" required oninvalid="setCustomValidity('请输入搜索内容')" oninput="setCustomValidity('')">
    

    错误示范

        <script>
            function tosubmit(category) {
                var search_category = $("input#search_category");
                search_category.val(category);
                $("form.search_form").submit();
            }
        </script>
    

    这样写就不进行检验,而直接提交。

    正确方案

        <script>
            function tosubmit(category) {
                var search_category = $("input#search_category");
                search_category.val(category);
                $("button#btn_submit").click();
            }
        </script>
    

    总结:

    点击 type=“submit” 的按钮会先进行输入检验,再进行提交。
    调用 form 的submit函数会直接进行提交。

    相关文章

      网友评论

        本文标题:解决js调用form的submit函数不进行输入检验的问题

        本文链接:https://www.haomeiwen.com/subject/eycekxtx.html