2012-02-02 32 views
6

Tôi đang cố xây dựng danh sách các nút radio có nhãn để bạn có thể nhấp vào nhãn để kiểm tra mục radio. Những gì tôi đã làm tốt trong Chrome, nhưng không phải là IE7. HTML mà có được nhổ ra có vẻ như nó là chính xác, nhưng khi tôi nhấp vào nhãn, nút radio tương ứng không được chọn.Danh sách nút radio với 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 --> 

cách ưa thích để làm điều này là gì?

Trả lời

1

Điều này có vẻ đang hoạt động chính xác ngay bây giờ kể từ phiên bản Knockout mới nhất (2.1.0).

0

Tôi không quen thuộc với knockout.js, nhưng bạn thường có thể kết buộc nhãn với đầu vào chỉ bằng cách làm cho nhãn quấn quanh hộp nhập liệu.

http://jsfiddle.net/QD2qC/

+1

Bạn không nên cân nhắc việc bao gồm đầu vào có nhãn. Đó không phải là đánh dấu chính xác và bạn có thể nhận được hành vi không nhất quán giữa các trình duyệt. Cách chính xác để thực hiện nó là khi op đang thực hiện bằng thuộc tính 'for' trên nhãn – soniiic

+3

Đây là đánh dấu chính xác, xem thông số HTML4: http://www.w3.org/TR/html4/interact/forms .html # edef-LABEL – Doug

-3

Dường như HTML của bạn không sao. Nó có thể là một quirk của IE7 không thể xác nhận nhấp chuột của nhãn đã được tạo động.

Nếu bạn không thể tìm thấy một câu trả lời thích hợp, bạn luôn có thể sử dụng this workaround:

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

Tôi đã thay đổi nó một chút bằng cách sử dụng on() thay vì click() để giải thích cho các nhãn này được tạo ra tự động.

+1

Tôi không liệt kê jQuery ở bất kỳ đâu trong các thẻ hoặc câu hỏi. Đây là một vấn đề/câu hỏi với khung công tác Knockout.js. Nó tuyên bố là cross-trình duyệt và tôi cần phải biết nếu đó là sự thật hay không mà không có rất nhiều JQ hack để có được trình duyệt để hành xử. – arb

+0

Với tôi, đây không phải là vấn đề với khung công tác knockout.js. Nếu nó xuất ra đúng html thì vấn đề nằm ở nơi khác, đó là lý do tại sao tôi đề nghị nó có thể là một trình duyệt riêng biệt của IE7. – soniiic

+0

Tôi đã tìm thấy một giải pháp khả thi: http://stackoverflow.com/questions/1252690/ie-hidden-radio-button-not-checked-when-the-corresponding-label-is-clicked Có phải vì các trường nhập của bạn Đang ẩn? – soniiic