2014-01-21 104 views
11

我已經在單選按鈕列表上綁定「已選中」和「單擊」事件。但是,無論何時點擊單選按鈕,選擇都不會停留。我一定在做一些非常錯誤的事情。真的很感激,如果你們能指出我正確的方向。淘汰賽js單選按鈕單擊事件重置選擇

請參閱Fiddle Here

視圖模型:

var viewModel = { 
    wantsSpam: ko.observable(true), 
    spamFlavor: ko.observable('cherry'), 

    click: function(model){ 
     console.log(model); 
    } 
}; 

查看:

<input type="radio" name="flavorGroup" value="cherry" 
     data-bind="checked: spamFlavor, click:click" /> 

回答

32

click event documentation:

默認情況下,淘汰賽將阻止click事件從採取任何默認操作。
...
但是,如果您確實想讓默認click操作繼續進行,則只需從您的單擊處理函數return true即可。

所以你的單選按鈕復位,因爲你click處理程序,並修復它,你只需要return true末:

click: function(){ 
    alert('Hi'); 
    return true; 
} 

演示JSFiddle

5

您只需從點擊事件中刪除點擊事件或使用return true即可。由於Knockout阻止點擊事件採取任何默認操作。這意味着,如果你使用點擊上的標籤(鏈接)結合,例如,瀏覽器將只調用處理功能並不會瀏覽到該鏈接的href

var viewModel = { 
    wantsSpam: ko.observable(true), 
    spamFlavor: ko.observable('cherry'), 
    /*click: function(){ 
     alert('Hi'); 
    }*/ 
}; 

或者

var viewModel = { 
    wantsSpam: ko.observable(true), 
    spamFlavor: ko.observable('cherry'), 
    click: function(){ 
     alert('Hi'); 
     return true; 
    } 
}; 
+0

Thansk Ling.s,從單擊事件解決的問題返回true。我接受了@nemesv的答案。 – JenonD

+0

@ user563309歡迎 –

6

基本上,您的點擊處理程序不會最終捕捉到您想保留該值。

發生的事情是,您選擇一個項目後它將回到默認狀態。

簡單的嘗試:

return true;

正如你handler的唯一代碼。

小提琴遠:http://jsfiddle.net/SinisterSystems/jhHkD/4/

+1

謝謝尼古拉斯,你的回答是正確的,但我接受了@nemesv的答案,因爲它在上面。 :( – JenonD

+0

不用擔心:-)感謝+10 ;-) –