2016-04-20 42 views
0

我想要做的是顯示一些單選按鈕與來自服務器的數據。問題是單選按鈕的選中值可能全是假,然後KO自動選擇最後一個單選按鈕,就像我在下面創建的JS小提琴一樣。如果其中一個值是真的,這完美地按預期工作,但在我的情況下,這些值很可能都是錯誤的。Knockout JS單選按鈕選擇最後一個按鈕,如果所有值都爲真

https://jsfiddle.net/9mtzbmng/1/

self.addItems = function (items) { 
      for (var x in items) 
      { 
       self.Items.push(new Item(items[x])); 
      } 
     } 
    function Item(items) { 
    this.ID = items.ID; 
    this.Checked = ko.observable(false); 
    } 

<input type="radio" data-bind="value: $data.ID,checked: Checked, checkedValue: Checked" name="items"> 

編輯: https://jsfiddle.net/hrhuym0u/ 我的問題是通過設置checkedValue: 'true'和設置this.Checked = ko.observable("false")下面這個的jsfiddle後固定!

+0

請確保該問題本身包含瑞普問題所需的所有代碼。如果你的[jsfiddle link rots](https://en.wikipedia.org/wiki/Link_rot)這個問題對未來的訪問者來說將會變得不那麼有用。 – Jeroen

回答

2

documentation

對於單選按鈕,KO將設置元件進行檢查,當且僅當參數值等於對應的單選按鈕節點的``值屬性或checkedValue指定的值參數

你的情況,你需要設置checkedValuetrue所以當你觀察到的Checked包含true才把它會檢查你的單選按鈕:

<input type="radio" name="radioB" data-bind="value: $data.ID, 
              checked: Checked, 
              checkedValue: true"> 

演示https://jsfiddle.net/r6njzje3/

注意:如果您的單選按鈕具有相同的name然後他們正在形成一個組,以便只有其中一個可以進行檢查,也就是這樣的原始樣品總是最後一個在被檢查。因爲checked總是等於checkedValue的值。因此,如果您將刪除名稱name="radioB",您的所有無線電將被檢查。注意2:您應該確保您的Checked屬性中有實際的boolea n值,並且您的服務器不會將它們作爲字符串發送,例如, "true",因爲在這種情況下,你還需要指定checkedValue爲一個字符串:

<input type="radio" name="radioB" data-bind="value: $data.ID, 
              checked: Checked, 
              checkedValue: 'true'"> 

演示:https://jsfiddle.net/hrhuym0u/

+0

問題是,現在都是真實的,所以當我從服務器獲取數據說其中一個是真的,然後沒有檢查值 – xDevil

+0

您是否刪除了name屬性?對我來說,這裏工作正常,所有的都是真的,都是假的:https://jsfiddle.net/7w2uvjqz/1/,如果它仍然不工作,你能更新這個小提琴嗎? – nemesv

+0

我還沒有刪除名稱屬性,因爲我需要他們作爲一個組,這就是爲什麼他們在jsfiddle我已經作出 – xDevil

相關問題