【问题标题】:AngularJs Validation on Date doesn't work in IE and MozillaAngularJs Validation on Date 在 IE 和 Mozilla 中不起作用
【发布时间】:2016-04-29 07:04:35
【问题描述】:

我的问题是,当我尝试在我的输入类型 date(birthdate)上输入 required 时,当我输入 date(4/29/2016) 时,required 仍然显示,它不会让我提交我的表单。当我试图在我的birthdate 输入上删除所需的属性时,它工作正常......但我想要的是使birthdate 成为必需的......我不知道为什么它不会在日期同时工作它适用于其他必需的输入,如 full_namegenderemail

由于 html5 在 Mozilla 和 IE 中不起作用 我使用插件让它工作。

    <!--HTML5 Date and Month Input Compatibility-->
    <!-- cdn for modernizr-->
    <script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script>
    <!-- polyfiller file to detect and load polyfills -->
    <script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script>
    <!--end of compatibility-->
    <script>
      webshims.setOptions('waitReady', false);
      webshims.setOptions('forms-ext', {types: 'date'});
      webshims.polyfill('forms forms-ext');
    </script>

提交按钮

    <button type="submit" form="form-customer"
            class="btn btn-primary pull-right" id="cmd_insert_customer" ng-show="tab == 3">
     Insert Customer
    </button>

表格

   <div class="row" ng-show="tab == 3">
        <div class="col-md-12">
        <form name="form" ng-submit="form.$valid && insertCustomer(form)" id="form-customer" class="css-form" novalidate >
            <div class="row">
                <div class="col-xs-4">
                    <div class="row">
                        <div class="col-xs-12">
                            <img src="{{profilePic}}" id="profile_picture" class="img-responsive img-thumbnail"  />
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-xs-12"> 
                            <input type="file" name="image_path" id="image" class="form-control" onchange="angular.element(this).scope().uploadFile(this.files)"  />
                        </div>  
                    </div>
                </div>
                <div class="col-xs-8">
                    <div class="row">
                        <div class="col-md-7">
                            <label>Full Name* 
                            <span class="required-label" ng-show="form.$submitted || form.full_name.$touched">
                                <span ng-show="form.full_name.$error.required">(Full Name is required.)</span>
                            </span>
                            </label>
                            <input type="text" ng-model="insertProfile.full_name" name="full_name" class="form-control" required="" />
                        </div>
                    </div>
                    <br />
                    <div class="row">
                        <div class="col-md-7">
                            <label>Gender*
                            <span class="required-label" ng-show="form.$submitted || form.gender.$touched">
                                <span ng-show="form.gender.$error.required">(Gender is required.)</span>
                            </span>
                            </label>
                            <select name="gender" class="form-control" ng-model="insertProfile.gender" required >
                            <option value ="">Select Gender</option>
                            <option value = "M">Male</option>
                            <option value = "F">Female</option>
                        </select>
                        </div>
                    </div>
                    <br />
                    <div class="row">
                        <div class="col-md-7">
                            <label>Birth Date*
                            <span class="required-label" ng-show="form.$submitted || form.birth_date.$touched">
                                <span ng-show="form.birth_date.$error.required">(Birthdate is required.)</span>
                            </span>
                            </label>
                            <input type="date" name="birth_date" class="form-control" ng-model="insertProfile.birth_date" required />
                        </select>
                        </div>
                    </div>
                </div>
            </div>
            <br />  
                <div class="row">
                <div class="col-md-5">
                    <label>Mobile #</label>
                    <input type="number" name="mobile" value="" class="form-control" ng-model="insertProfile.mobile" />
                </div>
                <div class="col-md-5">
                    <label>Email* 
                    <span class="required-label" ng-show="form.email.$error.email">(Invalid email address.)</span> 
                    <span class="required-label" ng-show="form.$submitted || form.email.$touched">
                        <span ng-show="form.email.$error.required">(Email is required.)</span>
                    </span>
                    </label>
                    <input type="email" name="email" value="" class="form-control" ng-model="insertProfile.email" required />
                </div>
            </div>
            <br />
                <div class="row">
                <div class="col-md-5">
                    <label>City</label>
                    <input type="text" name="city" value="" class="form-control" ng-model="insertProfile.city" />
                </div>
                <div class="col-md-5">
                    <label>Address</label>
                    <textarea name="address" class="form-control" rows="4" cols="50" ng-model="insertProfile.address" ></textarea>
                </div>
            </div>
        </form>
        </div>  
    </div>

【问题讨论】:

    标签: javascript jquery angularjs html


    【解决方案1】:

    我认为它不起作用,因为 AngularJS 使用 ISO-8601 格式 验证类型日期,即 yyyy-mm-dd。因此使用 yyyy/mm/dd 输入日期将导致触发错误的无效格式。请阅读 AngularJS 文档here 了解更多信息。

    【讨论】:

    • 我碰巧弄清楚发生了什么......当我添加插件时......我的输入类型日期被隐藏并替换为输入类型文本日期选择器......当我选择在插件制作的日期选择器上,它还会复制我的输入类型日期上的值......但是日期无法验证粘贴在其上的日期,因为验证是由 $touched(或类似的按键行为)进行的......但是我仍然没有答案...关于如何解决这个问题..我正在搜索是否有类似 ng-change 验证的方法...检测我的输入类型日期的更改
    • 所以我想您使用bootstrap-datepicker 库作为日期输入表单?您能否更新提供插件使用的代码,因为我对日期选择器没有任何线索。
    • 我正在使用 html5 input type= 'date'...再看看我的问题...你可以在那里看到一个 polyfill...如果浏览器不支持我的 html5 日期,它会将其替换为一个日期选择器...,但单击提交按钮时它应该工作的另一件事...因为,我在那里使用or...$touched$submitted....
    • 抱歉,我不知道您正在使用 polyfill 替换日期选择器。我个人没有尝试过使用 polyfill 插件,所以很抱歉我不能在这里给出最好的答案。但我碰巧尝试使用 bootstrap-datepicker 和 input type="date" 并且它适用于 Firefox 中所需的验证。也许您可以尝试使用该库。如果您有兴趣,也许我也可以为您更新示例
    • 好的,我会尝试搜索它..感谢您的建议...不过我仍在摸不着头脑...我在这上面待了 3 个小时..
    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2016-02-18
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多