敲除验证验证邮政CSS冲突

发布于 2025-01-24 10:05:30 字数 3628 浏览 2 评论 0原文

我正在尝试验证淘汰JS动态问题形式:

<form id="" action="" data-bind="foreach: Fields">
           <!--ko if: $parent.HiddenElements().indexOf(Name()) == -1 -->
        <div>
            <b type="text" data-bind="text: Name"></b>
            <br /> <br />
        </div>:
            <!--ko if: Type() == "Radio"-->
        <div data-bind="foreach: Options">
            <label>
                <input type="radio" class="mybutton" value="cherry" data-bind="value: $data.name,  attr: { 'id': $data.id},checked: $parent.Default" required="required"/>
                <span class="lbl padding-4" data-bind="text: $data.name"></span>
            </label>
        </div>
         <!--/ko-->
         <!--/ko-->
  </form>
<button type="button" data-bind='click: $root.submit'>Submit</button>

 var jsonData = [{
            Name: "Test1",
            Type: "Radio",
            Options: [{ name: 'Male' }, { name: 'Female' }, { name: 'Unknown' }],
            Validation: {required: "This question is required"},
            Default: "" 
        }];
 function FormField(data) {
        var self = this;
        self.Name = ko.observable(data.Name).extend({ required: true });
        self.Type = ko.observable(data.Type);
        self.Options = ko.observableArray(data.Type !== 'text' ? data.Options : []);
        if (Array.isArray(data.Default))
            self.Default = ko.observableArray(data.Default);
        else
            self.Default = ko.observable(data.Default).extend(data.Validation);
        if (self.Type() === 'Radio') {

            self.Default.subscribe(function (newValue) {
                alert(newValue);
            });
        }
    }
   ko.validation.init({
            insertMessages: true,
            decorateElement: true,
            errorElementClass: 'error',
            errorMessageClass: 'help-inline'
    }, true);
    function ViewModel(data) {
        var self = this;
        self.Fields = ko.observableArray(ko.utils.arrayMap(data,
            function (item) {
                return new FormField(item);
            }));
        self.HiddenElements = ko.observableArray([]);
        self.errors = ko.validation.group(this, {
                deep: true,
                observable: false
         });
        self.submit = function () {
            for (var ii = 0; ii < self.Fields().length; ii++) {
                console.log(ii);
                console.log(self.Fields()[ii].Default());
            }
            if (self.errors().length > 0) {
                self.errors.showAllMessages();
                return;
            }
            else {
                alert('Thank you.');
            }
        };
    }
    ko.applyBindings(new ViewModel(jsonData));

挑战是observablearray data.defalut扩展(data.validation)。它添加了跨度:

<label class="checkbox-inline check">
                <input type="checkbox" class="mybutton" data-bind="checkedValue: $data.name , checked: $parent.Default" value="Green">
               **<span class="validationMessage" style="display: none;"></span>**        
               <span class="lbl padding-4" data-bind="text: $data.name">Green</span>
</label>

哪些与CSS跨度发生冲突,并且在渲染视图上没有显示按钮。我用来用图标生成自定义的广播按钮的CSS,该按钮 https://codepen.io/ shankris/pen/mvokxp

如果我删除自定义CSS,则可以使用;但是,这些按钮看起来不专业。

是否有一种方法可以更改验证信息的位置,最好低于问题名称。

I am trying to validate a Knockout JS dynamic questions form:

<form id="" action="" data-bind="foreach: Fields">
           <!--ko if: $parent.HiddenElements().indexOf(Name()) == -1 -->
        <div>
            <b type="text" data-bind="text: Name"></b>
            <br /> <br />
        </div>:
            <!--ko if: Type() == "Radio"-->
        <div data-bind="foreach: Options">
            <label>
                <input type="radio" class="mybutton" value="cherry" data-bind="value: $data.name,  attr: { 'id': $data.id},checked: $parent.Default" required="required"/>
                <span class="lbl padding-4" data-bind="text: $data.name"></span>
            </label>
        </div>
         <!--/ko-->
         <!--/ko-->
  </form>
<button type="button" data-bind='click: $root.submit'>Submit</button>

 var jsonData = [{
            Name: "Test1",
            Type: "Radio",
            Options: [{ name: 'Male' }, { name: 'Female' }, { name: 'Unknown' }],
            Validation: {required: "This question is required"},
            Default: "" 
        }];
 function FormField(data) {
        var self = this;
        self.Name = ko.observable(data.Name).extend({ required: true });
        self.Type = ko.observable(data.Type);
        self.Options = ko.observableArray(data.Type !== 'text' ? data.Options : []);
        if (Array.isArray(data.Default))
            self.Default = ko.observableArray(data.Default);
        else
            self.Default = ko.observable(data.Default).extend(data.Validation);
        if (self.Type() === 'Radio') {

            self.Default.subscribe(function (newValue) {
                alert(newValue);
            });
        }
    }
   ko.validation.init({
            insertMessages: true,
            decorateElement: true,
            errorElementClass: 'error',
            errorMessageClass: 'help-inline'
    }, true);
    function ViewModel(data) {
        var self = this;
        self.Fields = ko.observableArray(ko.utils.arrayMap(data,
            function (item) {
                return new FormField(item);
            }));
        self.HiddenElements = ko.observableArray([]);
        self.errors = ko.validation.group(this, {
                deep: true,
                observable: false
         });
        self.submit = function () {
            for (var ii = 0; ii < self.Fields().length; ii++) {
                console.log(ii);
                console.log(self.Fields()[ii].Default());
            }
            if (self.errors().length > 0) {
                self.errors.showAllMessages();
                return;
            }
            else {
                alert('Thank you.');
            }
        };
    }
    ko.applyBindings(new ViewModel(jsonData));

The challenge is when observableArray data.Defalut is extend(data.Validation). It adds span:

<label class="checkbox-inline check">
                <input type="checkbox" class="mybutton" data-bind="checkedValue: $data.name , checked: $parent.Default" value="Green">
               **<span class="validationMessage" style="display: none;"></span>**        
               <span class="lbl padding-4" data-bind="text: $data.name">Green</span>
</label>

Which conflicts with the css span and the button does not show on the rendered view. The css I am using to generates custom radio button with icon, which is at https://codepen.io/ShanKris/pen/mVOKXp.

If I remove the custom css, it works; however, the buttons do not look professional.

Is there a way to change the position of the validationMessage, preferably below the question Name.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

汐鸠 2025-01-31 10:05:30

我通过设置“疏远”:将消息插入false解决了这一问题。并添加
输入标签后手动手动验证范围。

  <!--ko if: Type() == "Radio"-->
            <div data-bind="foreach: Options">
    
                <label>
                    <input type="radio" class="mybutton" value="cherry" data-bind="value: $data.name,  attr: { 'id': $data.name}, validationOptions:{insertMessages: false},checked: $parent.Default" required="required" />
                    <span class="lbl padding-4" data-bind="text: $data.name"></span>
                </label>
                <span style="color:red" data-bind="validationMessage:  $parent.Default"></span>
            </div>
            <hr />
            <!--/ko-->

I solved this by setting the valiationOptions: Insert Messages to false. and add the
validationMessage span manually after input label.

  <!--ko if: Type() == "Radio"-->
            <div data-bind="foreach: Options">
    
                <label>
                    <input type="radio" class="mybutton" value="cherry" data-bind="value: $data.name,  attr: { 'id': $data.name}, validationOptions:{insertMessages: false},checked: $parent.Default" required="required" />
                    <span class="lbl padding-4" data-bind="text: $data.name"></span>
                </label>
                <span style="color:red" data-bind="validationMessage:  $parent.Default"></span>
            </div>
            <hr />
            <!--/ko-->
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文