Javascript 带有Knockout.js的单选按钮列表

Javascript 带有Knockout.js的单选按钮列表,javascript,data-binding,radio-button,knockout.js,Javascript,Data Binding,Radio Button,Knockout.js,我正在尝试构建一个带有标签的单选按钮列表,以便您可以单击标签来检查单选项。我所拥有的东西在Chrome上运行良好,但在IE7上不行。get吐出的HTML看起来是正确的,但是当我单击标签时,相应的单选按钮没有被选中 JavaScript function ReuqestType(id, name, billable) { this.id = id; this.name = name; this.billable = billable; } function Request

我正在尝试构建一个带有标签的单选按钮列表,以便您可以单击标签来检查单选项。我所拥有的东西在Chrome上运行良好,但在IE7上不行。get吐出的HTML看起来是正确的,但是当我单击标签时,相应的单选按钮没有被选中

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 -->
请求类型


首选的方法是什么?

我不熟悉knockout.js,但通常只需将标签环绕在输入框上,就可以将标签绑定到输入


看起来您的HTML很好。这可能是IE7无法确认动态生成的标签点击的一个怪癖

如果你找不到合适的答案,你可以使用:


我用它代替了<代码>点击()/代码>来解释这些标签是动态生成的。

< P>这似乎是正确的,就像最新版本的KoCKOUT(2.1.0)。

你不应该考虑用标签包装输入。这不是正确的标记,而且浏览器之间可能会出现不一致的行为。正确的方法是,op使用标签上的
for
属性进行标记。这是正确的标记,请参见HTML4规范:我没有在标记或问题中的任何地方列出jQuery。这是Knockout.js框架的一个问题。它声称是跨浏览器的,我需要知道这是不是真的,如果没有很多JQ黑客来让浏览器正常工作的话。对我来说,这不是knockout.js框架的问题。如果它输出正确的html,那么问题就在别处,这就是为什么我建议它可能是IE7特有的怪癖。我找到了一个可能的解决方案:是因为你的输入字段被隐藏了吗?不,这正是我在问题中所说的,正如我已经说过的;它在IE7中不起作用。
$('label').on('click', function() {
   var labelId = $(this).attr('for');
   $('#' + labelId ).trigger('click');
});