2014-03-27 23 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