2017-08-02 55 views
1

我试图让复选框被选中时禁用输入框。我试图使用Knockoutjs来完成这件事,但它似乎并不奏效。使用knockoutjs禁用绑定

这里是我的html:

<input id="input1" type="text" placeholder="Something Here" 
data-bind="disable: makeInvalid"/> 
<input type="checkbox" id="chk1" data-bind="checked: makeInvalid"/> 
<label>Make Textarea Invalid</label> 

这里是我的JS:

var viewModel = { 
     makeInvalid : ko.observable(false),   
}; 

ko.applyBindings(viewModel, document.getElementById("chk1")); 

我的小提琴是在这里:

https://jsfiddle.net/devEngine/3ag0881z/2/

我试图遵循淘汰赛的说明他们说的禁用绑定与enabl完全一样E结合,正好相反:

http://knockoutjs.com/documentation/enable-binding.html

谁能告诉我什么,我做错了什么?

任何帮助将不胜感激。

+0

此外,jQuery和淘汰赛文件添加到您的小提琴,这是正常的你的小提琴不会没有他们:-) – Shadowfox

+0

@Shadowfox工作,而淘汰赛可以组合使用与jQuery ,Knockout没有依赖于jQuery(也没有任何其他的JavaScript库)。 – DavidRR

回答

3

这是一个超级简单的修复。你的应用绑定只是击中了id为chk1的元素。可观察值的价值将仅限于该范围内。只需删除你的ko.applyBindings的第二个参数,它会工作得很好。

var viewModel = { 
 
     makeInvalid : ko.observable(false),   
 
}; 
 
    
 
    ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 

 
<input id="input1" type="text" placeholder="Something Here" 
 
data-bind="disable: makeInvalid"/> 
 
<input type="checkbox" id="chk1" data-bind="checked: makeInvalid"/> 
 
<label>Make Textarea Invalid</label>

+0

非常感谢您的回复 - 非常感谢!我明白这是如何工作的;然而,如果我需要明确指定一个元素以避免稍后发生多重绑定错误。你会看到,我的形式中有很多这样的元素。 – devEngine

+0

对不起,我想我知道了 - 只是包装在一个专用的div中。再次感谢! – devEngine

+0

您可以将其封装在div中,或者使用'with'绑定来指定一个对象作为视图模型。 (我更喜欢'with',这样你可以在需要时与其他视图进行交互。) –

1

你是从你的jsfiddle丢失淘汰赛。

这是不正确的 ko.applyBindings(viewModel, document.getElementById("chk1"));。您需要对输入和复选框应用绑定。 ko.applyBindings(viewModel);

见工作的jsfiddle: https://jsfiddle.net/3ag0881z/4/

+0

非常感谢 - 非常感谢! – devEngine