html5 - chrome报错:An invalid form control with name='' is not focusable?
高洛峰
高洛峰 2017-04-17 13:50:10
0
1
861

由于业务需求,做了一个动态切换select的功能。
option是必选的,所以加了required,但是每次提交的时候会出现

An invalid form control with name='' is not focusable.

这种错误。
以下是代码。当点击 子网时,显示select1 当点击 专题时,显示select2

    <form ng-submit="news_submit()" class="pure-form" >
        <fieldset style="margin: auto;
width: 80%;">
            <p class="pure-control-group">
                <label for="maintitle">主标题</label>
                <input id="maintitle" type="text" placeholder="主标题" required ng-model="news_edit.maintitle" required/>
            </p>

            <p class="pure-control-group">
                <label for="subhead">副标题</label>
                <input id="subhead" type="text" placeholder="副标题" ng-model="news_edit.subhead"/>
            </p>
            <p class="pure-control-group">
                <label for="password">视频地址</label>
                <input id="password" type="text" placeholder="视频地址" ng-model="news_edit.videourl"/>
            </p>

            <p class="pure-control-group">
                <label for="email">题图</label>
                <input id="email" type="file" class="pure-button pure-button-primary" ng-model="news_edit.titlepic"/>
            </p>

            <a class="pure-control-group">
                <label for="state">栏目

                </label>
                <p style="margin:10px 0 10px 0;    display: inline-block;">
                    <a ng-click="change_selecter(1)" class="pure-button "
                       ng-class="select_range?'pure-button-primary':''">子网</a>
                    <a ng-click="change_selecter(0)" class="pure-button "
                       ng-class="select_range?'':'pure-button-primary'">专题</a>
                </p>
                <p ng-include="select_range?'selecter2':'selecter1'"></p>
            </a>


        </fieldset>
        <p class="pure-controls">

            <p id="neditor" style="min-height:500px;" ng-model="news_edit.content" contenteditable="true"
                 place-holder="输入正文">

            </p>

            <button type="submit" class="pure-button pure-button-primary">Submit</button>
        </p>


    </form>


    <button id="btn1">获取内容</button>
</p>

<script id="selecter1" type="text/ng-template">
    <p>
        <select ng-model="col_selectlv[0]" ng-options="x.colname for x in col_select[0]" required>
            <option></option>
            <option></option>
        </select>
        <select ng-model="col_selectlv[1]" ng-options="x.colname for x in col_selectlv[0].children"
                ng-show="col_selectlv[0].children"
                required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[2]" ng-options="x.colname for x in col_selectlv[1].children"
                ng-show="col_selectlv[1].children" required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[3]" ng-options="x.colname for x in col_selectlv[2].children"
                ng-show="col_selectlv[2].children" required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[4]" ng-options="x.colname for x in col_selectlv[3].children"
                ng-show="col_selectlv[3].children" required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[5]" ng-options="x.colname for x in col_selectlv[4].children"
                ng-show="col_selectlv[4].children" required>
            <option></option>
        </select>
    </p>
</script>
<script id="selecter2" type="text/ng-template">
    <p>
        <select ng-model="col_selectlv[0]" ng-options="x.colname for x in col_select[1]" required>
            <option></option>
            <option></option>
        </select>
        <select ng-model="col_selectlv[1]" ng-options="x.colname for x in col_selectlv[0].children"
                ng-show="col_selectlv[0].children"
                required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[2]" ng-options="x.colname for x in col_selectlv[1].children"
                ng-show="col_selectlv[1].children" required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[3]" ng-options="x.colname for x in col_selectlv[2].children"
                ng-show="col_selectlv[2].children" required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[4]" ng-options="x.colname for x in col_selectlv[3].children"
                ng-show="col_selectlv[3].children" required>
            <option></option>
        </select>
        <select ng-model="col_selectlv[5]" ng-options="x.colname for x in col_selectlv[4].children"
                ng-show="col_selectlv[4].children" required>
            <option></option>
        </select>
    </p>
</script>

由于这是一个新闻发布编辑器,需要选择最终子栏目,所以预设了6个层级,当n层级有子栏目时候,显示n+1的select。
搜索了一下,建议的解决方案是先删掉所有的required,然后在提交的时候验证,想知道这是不是唯一的方法?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(1)
小葫芦

已解决。
出现该错误的原因是chrome发现了有隐藏(display:none)的required需求元素,所以会出错。
将ng-show改为ng-if,从隐藏标签变为移除dom,可以避免这个错误。

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal