无法使用由对象填充的parsley.js验证<select>

时间:2017-02-07 09:11:41

标签: javascript jquery validation knockout.js parsley.js

我在验证&lt; select&gt;时遇到问题我表格上的元素。使用knockout.js选择位置,然后根据所选位置填充服务点。按下提交按钮后,将使用parsley.js验证表单 我一直得到“这个值是必需的。”在位置&lt; select&gt;当欧芹试图验证表格时。它填充得很好,当关闭验证时,值会出现并按预期流回到数据库但是当启用验证时,欧芹会抛出错误,说明“此值是必需的”。如果“位置”下拉列表中有明显的值,则无法选择“服务点”。 我对这些库很新,但是我的猜测与它被一个对象填充有关,尽管我认为这不会是一个问题,因为那里仍然存在价值。 希望我提供了足够的信息,如果您需要其他任何我可以提供的信息。 任何想法将不胜感激! viewModelLocationAndServicePoint.data() [     {         “ServicePoints”:[             {                 “ServicePoint”:“ServicePoint1”             }         ]         “位置”:“位置1”     },     {         “ServicePoints”:[             {                 “ServicePoint”:“ServicePoint1”             },             {                 “ServicePoint”:“ServicePoint2”             },             {                 “ServicePoint”:“ServicePoint3”             }         ]         “位置”:“位置2”     } ] 可观察人口 self.Location = ko.observable(data.Location()。Location()); self.ServicePoint = ko.observable(data.ServicePoint()); viewModelTrackFiles输出 {     “trackfile”:{         “地点”: {             “ServicePoints”:[                 {                     “ServicePoint”:“ServicePoint1”                 }             ]             “位置”:“位置1”         },         “TransactionMode”:“”,         “ServicePoint”:“ServicePoint1”,         “状态”: ””,         “评论”: ””,         “条码”: ””,         “BarcodeImageBase64”:“”     },     “文件”:[],     “printneeded”:“不”,     “TransactionMode”:“”,     “dispatchmode”:false,     “StaffName”:“”,     “TransactionDate”:“2017-02-06T16:29:49.914Z” } HTML &lt; select id =“cLocation”     数据香菜-需要=“真”     data-bind =“options:viewModelLocationAndServicePoint.data(),         optionsCaption:'选择位置',         optionsText:'位置',         value:trackfile.Location“&gt; &LT; /选择&GT; &lt; div data-field-span =“1”data-bind =“with:trackfile.Location”&gt;     &lt; select id =“cServicePoint”         数据香菜-需要=“真”         data-bind =“options:ServicePoints,             optionsCaption:'服务点',             optionsText:'ServicePoint',             optionsValue:'ServicePoint',             值:$ parent.trackfile.ServicePoint“&gt;     &LT; /选择&GT; &LT; / DIV&GT;

1 个答案:

答案 0 :(得分:0)

我想出了一个现在有用的肮脏的解决方法,如果其他人可以提出更好的东西或者解释为什么Parsley没有意识到<select>中实际上有一个值得太棒的值!

我创建了一个隐藏文字<input>,当<select>更改时,<input>会填充该文字。

然后将验证放在该文本<select>上。这会使Parsley错误消息显示在<select>下,但不会更改<select id="cLocation" data-bind="options: viewModelLocationAndServicePoint.data(), optionsCaption:'Choose Location', optionsText: 'Location', value: trackfile.Location"> </select> <input style="display: none" type="text" id="loc" data-parsley-required="true"> 的背景颜色(请参阅下面的屏幕截图),我现在可以使用它。

<强> HTML

<script type="text/javascript">
    $(function () {
        $("#cLocation").on("change", function () {
            //Update hidden text input to fix issue
            //where ParsleyJS is not validating Location
            //dropdown possibly due to how it is being populated
            $("#loc").val($("#cLocation option:selected").text());
        });
    });
</script>

jQuery脚本

StructLayout(LayoutKind.Sequential)

<强>截图

enter image description here