2014-03-27 25 views
7

我无法启用绑定在淘汰赛JS工作。将enabled属性设置为false时,该按钮不会被禁用,我仍然可以单击它。淘汰赛启用约束力不工作

看到fiddle

<a class="btn btn-xl btn-primary" 
    href="#" 
    role="button" 
    data-bind="enable: enabled, click: clicked, visible: isVisible"> 
     <i class="icon-only icon-ok bigger-130"></i> 
</a>  

var ViewModel = function(){ 
    var self = this; 

    self.enabled = ko.observable(false); 
    self.isVisible = ko.observable(true); 
    self.clicked = function(){ 
     alert('You clicked the button'); 
    }; 
}; 

$(function(){ 
    var model = new ViewModel(); 
    ko.applyBindings(model); 
})   

回答

19

Enable结合不与任何你想要的工作。

这对表单元素如输入,选择和文本区域很有用 它也适用于按钮。就像我的例子http://jsfiddle.net/5CbnH/1/

但它不适用于你的链接。您正在使用Twitter的引导,他们启用/禁用他们的“按钮”与CSS类。所以,你必须使用css binding这样的:

data-bind="css: { yourClass: enabled }" 

检查什么类负责在系统启动时进行展示你的“按钮”,并与CSS结合相应地修改代码。

+0

感谢。我们得出了同样的结论,但你更快到了那里。 –

+0

这是旧的,但小提琴需要关闭按钮的数据绑定报价 –

0

我通过将锚标记更改为按钮来实现它的功能,但并不确定为什么这会使其工作,但它仍然有效。

更新fiddle

<button class="btn btn-xl btn-primary" 
    role="button" 
    data-bind="enable: enabled, click: clicked, visible: isVisible"> 
     <i class="icon-only icon-ok bigger-130"></i> 
</button> 
+2

这是可行的,因为'a'没有禁用启用选项。你必须使用bootstrap的css(如我所建议的)或者使它成为一个真正的按钮(就像你在这里改变的那样)。 –

4

萨尔瓦多在回答中说了些什么。

你必须明白,enableddisabled通过把一个disabled属性目标DOM元素在淘汰赛工作结合。现在,如果您查看HTML文档,您会发现并非所有HTML元素都支持此属性。

实际上只有表单元素(例如<button>)。 <a>没有。

16

右:

启用/禁用

错误:

启用/禁用


确保将disable而不是disabledenable而不是enabled

<input type="text" data-bind="value: foo, enable: isEditing"/> YES!! 
<input type="text" data-bind="value: foo, enabled: isEditing"/> NO! 

本例为文本框。容易犯的错误:-)

+3

哦,亲爱的上帝恐怖的错别字......感谢... –

+1

圣f * cking狗屎的男人!谢谢......那......花了差不多一个小时......耶稣! –

2

谁的人可能会在搜索中找到这个:

我有一个问题让启用绑定到正常工作。我的问题是试图用一个复杂的表达式,而不喜欢引用函数的观测:

<input type="button" data-bind="enable:AreAllStepsVerified && IsFormEnabled, click:SubmitViewModel"/> 

本来应该是:

<input type="button" data-bind="enable:AreAllStepsVerified() && IsFormEnabled(), click:SubmitViewModel"/> 

参见:https://stackoverflow.com/a/15307588/4230970