带 Knockout.js 的单选按钮列表

发布于 2025-01-01 08:26:45 字数 912 浏览 1 评论 0原文

我正在尝试构建一个带有标签的单选按钮列表,以便您可以单击标签来检查单选项目。我的东西在 Chrome 中运行良好,但在 IE7 中不行。吐出的 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 -->

执行此操作的首选方法是什么?

I'm trying to build a list of radio buttons with labels so that you can click the label to check the radio item. What I have works fine in Chrome, but not IE7. The HTML that get's spit out seems like it is correct, but when I click on the label, the corresponding radio button doesn't get selected.

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 -->

What is the preferred way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

岁月无声 2025-01-08 08:26:45

从最新版本的 Knockout (2.1.0) 开始,这似乎可以正常工作。

This seems to be working correctly now as of the newest version of Knockout (2.1.0).

☆獨立☆ 2025-01-08 08:26:45

我不熟悉 knockout.js,但通常您也可以通过使标签环绕输入框来将标签绑定到输入。

http://jsfiddle.net/QD2qC/

I'm unfamiliar with knockout.js, but you can normally bind label's to inputs just by making the label wrap around the input box too.

http://jsfiddle.net/QD2qC/

jJeQQOZ5 2025-01-08 08:26:45

看起来你的 HTML 没问题。这可能是 IE7 的一个怪癖,无法确认动态生成的标签的点击。

如果您找不到正确的答案,您可以随时使用 此解决方法

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

我通过使用 on() 而不是 click() 来考虑到这些标签是动态生成的。

It looks like your HTML is fine. It could be a quirk of IE7 not being able to acknowledge clicks of labels that have been generated dynamically.

If you can't find a proper answer, you could always use this workaround:

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

I have changed it slightly by using on() instead of click() to account for these labels being generated dynamically.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文