2012-02-02 27 views
6

ラジオボタンのリストを作成して、ラジオボタンをクリックしてラジオアイテムを確認できるようにしようとしています。私がChromeでうまく動作しますが、IE7ではうまく動作しません。取得したHTMLは正しいと思われますが、ラベルをクリックすると対応するラジオボタンが選択されません。Knockout.jsのラジオボタンリスト

はJavaScript

function ReuqestType(id, name, billable) { 
    this.id = id; 
    this.name = name; 
    this.billable = billable; 
} 

function RequestViewModel() { 
    var self = this; 

    self.availableRequestTypes = [ 
     new ReuqestType(1, "Travel", true), 
     new ReuqestType(2, "Bill Only", false), 
     new ReuqestType(3, "Both", true) 
    ]; 

    self.selectedRequestType = ko.observable(); 
} 

HTML

Request Type 
<br /> 
<!-- ko foreach: availableRequestTypes --> 
<input type="radio" name="requestType" data-bind="value:id, attr: {'id': 'rt'+ id}" /> 
<label data-bind="text: name, attr:{'for':'rt'+id}"> 
</label> 
<!-- /ko --> 

これを行うための好ましい方法は何ですか?

答えて

1

これはKnockout(2.1.0)の最新バージョンとして正しく動作しているようです。

0

私はknockout.jsに慣れていませんが、ラベルを入力ボックスに囲むだけで、通常はラベルを入力にバインドできます。

http://jsfiddle.net/QD2qC/

+1

入力をラベルで囲むことは考慮しないでください。それは正しいマークアップではなく、ブラウザ間で一貫性のない動作をする可能性があります。ラベルの 'for'属性を使ってopが行っているように正しい方法です。 – soniiic

+3

これは正しいマークアップです.HTML4の仕様を参照してください: http://www.w3.org/TR/html4/interact/forms .html#edef-LABEL – Doug

-3

あなたのHTMLが細かいように見えます。これは、動的に生成されたラベルのクリックを認識できないIE7の奇妙なものです。

あなたは正しい答えを見つけることができない場合は、いつでもthis workaroundを使用することができます。

$('label').on('click', function() { 
    var labelId = $(this).attr('for'); 
    $('#' + labelId).trigger('click'); 
}); 

私は動的に生成され、これらのラベルを考慮してon()代わりのclick()を使用して、わずかにそれを変更しました。

+1

タグや質問のどこにでもjQueryを表示しませんでした。これはKnockout.jsフレームワークの問題です。それはクロスブラウザであると主張し、ブラウザを動作させるためにJQのハックがなければ、それが正しいかどうかを知る必要があります。 – arb

+0

私にとって、これはknockout.jsフレームワークの問題ではありません。それが正しいhtmlを出力するなら、問題は他の場所にあります。それがIE7特有のものかもしれないと私は示唆しました。 – soniiic

+0

私は可能な解決策を見つけました:http://stackoverflow.com/questions/1252690/ie-hidden-radio-button-not-checked-when-the-corresponding-label-is-clickedあなたの入力フィールド隠されていますか? – soniiic