【问题标题】:How to dynamic change styles with css and/or javascript如何使用 css 和/或 javascript 动态更改样式
【发布时间】:2019-08-18 09:58:59
【问题描述】:

我有一个按钮,我需要在单击它时更改一些样式。我可能可以通过添加和删除一些类轻松地做到这一点,但是我在页面运行时更改了第一个元素,所以现在我需要从第一个元素中删除样式并将其应用到单击的按钮上,但实际上我没有得到我怎么能使它成为第 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;
}

【问题讨论】:

    标签: javascript html css knockout.js


    【解决方案1】:

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

    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)
    }
    

    【讨论】:

    • 我试过这个,但没有在我的项目上工作。我收到“错误您不能多次将绑定应用于同一元素”
    • @MateusFernando 出了点问题。这在 sn-p 中运行良好。
    • 也许一些 js/jquery 唯一的解决方案可以帮助我更好地解决这个问题,因为我无法更改 ko 代码...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2020-03-13
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多