数据绑定禁用属性在foreach内的按钮中不起作用

时间:2016-03-21 12:34:00

标签: javascript knockout.js

我正在以一种形式工作,我有一个数据表和一个打开模态的按钮。我需要将此按钮设置为始终启用;我尝试使用下面的代码但没有成功。

ko.applyBindings({
  editarTexto: function(data) {
    alert("msg")
  },
  items: [{}, {}, {}]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<fieldset data-bind="disable: true">
  <table class="table">
    <thead>
      <tr>
        <th class="col-lg-1 ">Texto</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>
          <button type="button" class="form-control" data-bind="click: function() { $root.editarTexto($data) }, disable: false">
            <span class="glyphicon glyphicon-pencil" aria-hidden="true" data-bind="disable: false">&times;</span>
          </button>
        </td>
      </tr>
    </tbody>
  </table>
</fieldset>

有人能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您已经模糊了标题中的实际问题,并围绕代码进行了探讨。然而,代码本身表明您的问题可以解释为:

  

如何仅使用button属性启用字段集中的某些disabled

因此,复制品可以小得多:

<fieldset disabled>
   <input> <!-- should be disabled -->
   <button>x</button> <!-- should be ENabled, but isn't -->
</fieldset>

答案是:你做不到。唯一的解决方案是禁用fieldset并设置除按钮之外的所有后代元素disabled

作为参考,您可以从the enable/disable binding source file看到,除了在相关元素上设置disabled属性之外,它不会执行任何操作。

供参考,请参阅有关fieldset disabled attribute的MDN条目:

  

如果设置了此布尔属性,则表示作为其后代的表单控件(第一个可选元素的后代除外)将被禁用,即不可编辑。他们不会收到任何浏览事件,例如鼠标点击或与焦点相关的事件。浏览器通常会将此类控件显示为灰色。

供参考,另请参阅the AngularJS version of your question

答案 1 :(得分:0)

根据spec,您可以将按钮放在<legend>内。

<fieldset disabled>
  <legend>
    Legend
    <!-- This is ENABLED -->
    <button onclick="console.log('click')">Enabled</button>
  </legend>
  <input> <!-- this is disabled -->
  <button>disabled</button> <!-- this is disabled -->
</fieldset>