-2

我有一个按钮,单击它时需要更改一些样式。我可能可以通过添加和删除一些类轻松地做到这一点,但是我在页面运行时更改了第一个元素,所以现在我需要从第一个元素中删除样式并将其应用到单击的按钮上,但实际上我没有得到我怎么能使它成为第 n 个孩子(1)的原因。有人可以帮忙吗?

这是我的html:

<tr>
<!-- ko foreach: optionValues -->
<td>
    <input type="radio" id="volt" name="volt"
        data-bind="attr: {id: 'CC-prodDetails-' + $data.value}, value: $parent.selectedOption">
    <button data-bind="attr: {for: 'CC-prodDetails-' + $data.value}, text:key, 
                                                click:function(key){
                                                    $parent.selectedOption(key);
                                                    $parent.selectedOptionValue(key);
                                                }" class="voltagem"></button>
</td>
<!-- /ko -->

这就是我的CSS:

input {
  display: none;
}

.voltagem {
  font-size: 20px;
  border-color: #333;
  border-radius: 10px;
  border-style: dotted;
  margin-left: 25px;
  height: 55px;
  width: 135px;
  background-color: transparent;
}

.voltagem:focus {
  border-color: blue;
  border-style: solid;
  outline: none;
}

td:nth-child(1) .voltagem {
  border-color: blue;
  border-style: solid;
  outline: none;
}
4

1 回答 1

1

您可以css为此使用绑定。将类设置voltagem为按钮,如果$parent.selectedOption() === key

const model = function() {
  const self = this;
  const options = [ { key: "one" }, { key: "two" }, { key: "three" }];
  self.optionValues = ko.observable(options);
  self.selectedOption = ko.observable(options[0].key);
}

ko.applyBindings(new model)
.voltagem {
  color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
  <tr>
    <!-- ko foreach: optionValues -->
    <td>
      <button data-bind="text: key, 
                         click: function(obj) { $parent.selectedOption(obj.key) },
                         css: { voltagem: $parent.selectedOption() == key }">
      </button>
    </td>
    <!-- /ko -->
  </tr>
</table>

注意:您需要将click绑定功能更改为

function(obj) {
  $parent.selectedOption(obj.key)
  $parent.selectedOptionValue(obj.key)
}
于 2019-03-27T19:00:22.947 回答