knockoutjs单选按钮点击事件

knockoutjs radiobutton click event

我有一些 html:

<input name="Test" type="radio" value="yes" data-bind="checked: Page2.Traded, click: Traded_Yes" /> Yes
<input name="Test" type="radio" value="no" data-bind="checked: Page2.Traded, click: Traded_No" /> No

还有一些 Javascript:

    self.Traded_Yes = function(data) {
       $("#Page2Symbol").prop("disabled", false);
       return true;
    };

    self.Traded_Yes = function(data) {
       $("#Page2Symbol").prop("disabled", true);
       return true;
    };

UI 在禁用 id: Page2Symbol 和保存正确数据方面一切正常,但是 UI 不显示在 Yes/No 之间翻转的单选按钮我点击任一收音机。我这样做 return true 是为了允许此处讨论的默认点击操作:https://knockoutjs.com/documentation/click-binding.html,但是当我点击任一单选按钮时 UI 不会翻转选择。有什么想法吗?

我无法重现您的问题,但可能有一些好的建议来解决您可能遇到的问题:

使用敲除时,建议使 所有 与 DOM 的交互通过敲除绑定。要禁用和启用按钮,有 disableenable 绑定。以下是您如何使用它们:

使用 disable 绑定:

你添加一个 computed 属性 到你的 viewmodel 来定义是否基于 Traded 的值禁用。

这确保您不需要 click-binding 并且可以删除任何 id 引用。

const self = {};

self.Page2 = { Traded: ko.observable("yes") };
self.disablePage2Symbol = ko.pureComputed(() => self.Page2.Traded() === "yes");

ko.applyBindings(self);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<button data-bind="disable: disablePage2Symbol">Page 2 button</button>

<label> 
  <input type="radio" value="yes" data-bind="checked: Page2.Traded" /> Yes
</label>
<label> 
  <input type="radio" value="no" data-bind="checked: Page2.Traded" /> No
</label>

问题重现失败:

此代码段表明您的原始代码应该可以工作,即使它有点 anti-pattern。

const self = {};

self.Traded_Yes = function(data) {
   $("#Page2Symbol").prop("disabled", false);
   return true;
};

self.Traded_No = function(data) {
   $("#Page2Symbol").prop("disabled", true);
   return true;
};

self.Page2 = { Traded: ko.observable("yes") };

ko.applyBindings(self);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<button id="Page2Symbol">Page 2 button</button>

<input name="Test" type="radio" value="yes" data-bind="checked: Page2.Traded, click: Traded_Yes" /> Yes
<input name="Test" type="radio" value="no" data-bind="checked: Page2.Traded, click: Traded_No" /> No