【问题标题】:Knockout JS: Validation of Dropdowns inside the tableKnockout JS:验证表格内的下拉列表
【发布时间】:2018-08-30 23:34:55
【问题描述】:

在这里使用 Knockout JS。

当前设置:

我有一个 HTML 表格,表格有 5 列。我有按钮向表中添加一行,然后删除每一行的按钮以将其删除。我在该表的 2 列中也有一个下拉列表。第一个下拉列表由表格外的按钮单击事件填充。即,当您按下获取数据按钮时,它会填充下拉列表。此外,当您选择任何 dropdpwns 时,行数据会随着选择进行调整。 最后还有一个保存按钮。点击后我想保存所有数据。

我的下拉菜单如下:

  <td><select class="form-control" data-bind="options: $parent.ddl, optionsText: 'firstName', value: selectedValue, optionsCaption: '--Select--'"> </select></td>

  <td>
    <select class="form-control" data-bind="value: selectedSeparator">
       <option value="">--Select--</option>
       <option value="#">#</option>
       <option value="@">@</option>          
     </select>
  </td>

问题:

我的问题是关于验证。由于我在客户端单击添加了每一行,从而动态添加了这些下拉列表,我如何对下拉列表进行验证 这样当用户点击保存按钮时,如果任何行没有选择下拉菜单,它会突出显示该行并引发错误。

我的 jsfiddle 设置如下:

https://jsfiddle.net/aman1981/7wqvr854/2/

--------已更新---------

我现在已经更新了我的 jsfiddle。现在每个下拉菜单都有一个不同的 ID。请参阅更新的小提琴:

https://jsfiddle.net/aman1981/7wqvr854/51/

现在的 HTML 如下:

<select class="form-control" data-bind="options: $parent.ddl, optionsText: 'firstName', value: selectedValue, optionsCaption: '--Select--',  attr: { name: 'Items[' + $index() + '].Name', id: 'Items[' + $index() + '].Name'}" name="Items[0].Name" id="Items[0].Name"><option value="">--Select--</option><option value="">Alex</option><option value="">Sam</option> </select>

您可以在其中看到 ID 和名称:“Items[0].Name” 我还在我的 TD 中添加了 ID 作为 tdName

当我使用以下代码时,现在点击按钮:

  var selectList = $('#tdName > select');
        for (var selectName of selectList) {
          //Here I can see my dropdown but how to check dropdown selected text/value here
        }

上面的代码是否有可能我可以遍历所有下拉菜单并查看是否被选中

谢谢

【问题讨论】:

    标签: javascript jquery knockout.js


    【解决方案1】:

    您可以使用基于条件的 CSS 类来标记无效行。

    HTML:

    <tr data-bind="css: { invalidRow: isInvalid }">
    

    CSS:

    .invalidRow {
      background-color: #ffb8b5;
    }
    

    Javascript:

    self.Save = function(){
        for (i in self.items()) {
        if (typeof self.items()[i].selectedValue() == "undefined") {
          self.items()[i].isInvalid(true);
          alert("Select all dropdown")
        }
      }
    };
    

    【讨论】:

    • 我已经用您的更改更新了我的 jsfiddle:jsfiddle.net/aman1981/7wqvr854/41。还有什么需要在这里更改才能使其正常工作
    • isInvalid 应该在项目上
    • 对不起,托马斯,我不清楚。您能否更新上面的小提琴以进行所需的更改。
    • 感谢 Thomas,如果您添加一行并且在第一个下拉菜单中不选择任何内容,它会起作用。但是,如果您选择第一个下拉菜单而不选择第二个下拉菜单,则它会通过验证。我们如何验证两者。此外,如果您在我的帖子中为我的更新代码提供任何输入,我会在下拉列表中循环。再次感谢您调查
    • 感谢 tomas,我已经根据您的更改调整了我的代码,并使其适用于两个下拉菜单。感谢您的帮助。
    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 2014-06-06
    • 2017-03-30
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多