2012-02-02 23 views
6

Estoy tratando de crear una lista de botones de opción con etiquetas para que pueda hacer clic en la etiqueta para verificar el elemento de la radio. Lo que tengo funciona bien en Chrome, pero no en IE7. Parece que es correcto el código HTML que sale, pero cuando hago clic en la etiqueta, el botón de opción correspondiente no se selecciona.Lista de botones de radio con 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 --> 

¿Cuál es la mejor forma de hacer esto?

Respuesta

1

Parece que esto funciona correctamente ahora con la última versión de Knockout (2.1.0).

0

No estoy familiarizado con knockout.js, pero normalmente puede vincular las etiquetas a las entradas simplemente haciendo que la etiqueta se enrede alrededor de la caja de entrada también.

http://jsfiddle.net/QD2qC/

+1

No debería considerar envolver las entradas con etiquetas. No es un marcado correcto y puede tener un comportamiento incoherente entre los navegadores. La forma correcta de hacerlo es como lo hace la operación usando el atributo 'for' en la etiqueta – soniiic

+3

Este es el marcado correcto, vea las especificaciones de HTML4: http://www.w3.org/TR/html4/interact/forms .html # edef-LABEL – Doug

-3

Parece que tu HTML está muy bien. Podría ser una peculiaridad de IE7 no poder reconocer clics de etiquetas que se han generado dinámicamente.

Si no puede encontrar una respuesta adecuada, siempre se puede utilizar this workaround:

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

he cambiado ligeramente mediante el uso de on() en lugar de click() dar cuenta de estas etiquetas se generan de forma dinámica.

+1

No enumeré jQuery en ninguna parte de las etiquetas o la pregunta. Este es un problema/pregunta con el framework Knockout.js. Dice que es un navegador cruzado y necesito saber si es cierto o no, sin una gran cantidad de ataques JQ para que el navegador se comporte. – arb

+0

Para mí, esto no es un problema con el framework knockout.js. Si produce el html correcto, entonces el problema está en otra parte, y es por eso que sugerí que podría ser una peculiaridad específica de IE7. – soniiic

+0

He encontrado una posible solución: http://stackoverflow.com/questions/1252690/ie-hidden-radio-button-not-checked-when-the-corresponding-label-is-clicked ¿Es porque tus campos de entrada? ¿están escondidos? – soniiic