2012-02-02 3 views
6

Я пытаюсь создать список переключателей с ярлыками, чтобы вы могли щелкнуть метку, чтобы проверить элемент радио. То, что у меня отлично работает в Chrome, но не в IE7. HTML-код, который выталкивает, кажется правильным, но когда я нажимаю на метку, соответствующий переключатель не выбирается.Radio Button List with 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

Кажется, что он работает правильно, начиная с последней версии нокаута (2.1.0).

0

Я незнаком с knockout.js, но вы можете обычно привязывать метки к входам, просто делая этикетку обернутой вокруг окна ввода.

http://jsfiddle.net/QD2qC/

+1

Вы не должны рассматривать обертывание входов с помощью меток. Это неправильная разметка, и вы можете столкнуться с непоследовательным поведением между браузерами. Правильный способ сделать это, как работает op, используя атрибут 'for' на метке – 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