Javascript 为IE6创建动态名称为Angular的收音机
我在角度控制器中有以下数据列表Javascript 为IE6创建动态名称为Angular的收音机,javascript,html,angularjs,Javascript,Html,Angularjs,我在角度控制器中有以下数据列表 $scope.dataList = [ {id:1, name:"Record A", action:"A"}, //action : A = Authorized {id:2, name:"Record B", action:"R"}, //action : R = Rejected {id:3, name:"Record C", action:"P"}, //action : P = Pending {id:4
$scope.dataList = [
{id:1, name:"Record A", action:"A"}, //action : A = Authorized
{id:2, name:"Record B", action:"R"}, //action : R = Rejected
{id:3, name:"Record C", action:"P"}, //action : P = Pending
{id:4, name:"Record D", action:"A"},
{id:5, name:"Record E", action:"R"},
{id:6, name:"Record F", action:"A"}
];
我用三个单选按钮在每一行显示数据,这样用户可以更新动作值
<table border="1">
<thead>
<tr>
<th>Name</th>
<th>Pending</th>
<th>Authorize</th>
<th>Reject</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="data in dataList">
<td ng-bind="data.name"></td>
<td><input type="radio" name="action-{{data.id}}" ng-model="data.action" ng-value="'P'"></td>
<td><input type="radio" name="action-{{data.id}}" ng-model="data.action" ng-value="'A'"></td>
<td><input type="radio" name="action-{{data.id}}" ng-model="data.action" ng-value="'R'"></td>
</tr>
</tbody>
</table>
名称
悬而未决的
授权
拒绝
对于单选按钮的逻辑分组,我使用了name=“action-{{{data.id}}”
为每一行分别设置单选按钮集。由于data.id
对于每条记录都是唯一的,因此在每一行中,单选按钮将具有相同的名称,因此具有相同的逻辑组
它可以在现代浏览器中使用,但不幸的是,我必须在IE6中使用它。问题是,一旦在DOM中创建单选按钮,IE6就不允许更改name
属性。因此name=“action-{{data.id}}”
将保留,因为它会导致所有单选按钮都属于一个逻辑组
有什么解决办法吗?我正在考虑编写一个指令,在DOM中创建
radio
之前生成name
属性。可以使用指令吗?如果是这样,请帮助我。以下是我解决问题的方法。(代码可以更简洁,但这是基本思想。)
我将span
与my radio
指令一起使用,并在指令上列出了其他必需的属性
...
<td><span my-radio="data.id" my-model="data.action" my-value="'P'"></span></td>
<td><span my-radio="data.id" my-model="data.action" my-value="'A'"></span></td>
<td><span my-radio="data.id" my-model="data.action" my-value="'R'"></span></td>
...
这将为每一行生成以下代码。在这里,名称
属性是由“action”+data.id
表达式生成的
...
<td>
<span my-value="'P'" my-model="data.action" my-radio="data.id">
<input type="radio" ng-value="'P'" ng-model="data.action" name="action-1">
</span>
</td>
<td>
<span my-value="'P'" my-model="data.action" my-radio="data.id">
<input type="radio" ng-value="'A'" ng-model="data.action" name="action-1">
</span>
</td>
<td>
<span my-value="'P'" my-model="data.action" my-radio="data.id">
<input type="radio" ng-value="'R'" ng-model="data.action" name="action-1">
</span>
</td>
...
。。。
...
我认为你可以使用{{$index}而不是{{data.id}来表示name=“action-{{{data.id}}”,因为$index将自动为每个元素更改,并且你将具有动态名称。
作为使用指令的替代方法,它解决了我的问题。与Angular无关,但它与IE 6错误有关,我不久前遇到了这个问题:是的,我提到过。但是在DOM中创建元素之前,angular可以分配动态属性值吗?你不能停止支持这种垃圾吗?“今年6岁到12岁了,它需要休息。”疯子,你说得对。这简直是胡说八道。但是,正如我之前所说,“不幸的是”,我必须让事情在这方面顺利进行(我期待任何其他更好的解决方案。由于没有找到其他解决方案,我将此答案标记为正确。
...
<td>
<span my-value="'P'" my-model="data.action" my-radio="data.id">
<input type="radio" ng-value="'P'" ng-model="data.action" name="action-1">
</span>
</td>
<td>
<span my-value="'P'" my-model="data.action" my-radio="data.id">
<input type="radio" ng-value="'A'" ng-model="data.action" name="action-1">
</span>
</td>
<td>
<span my-value="'P'" my-model="data.action" my-radio="data.id">
<input type="radio" ng-value="'R'" ng-model="data.action" name="action-1">
</span>
</td>
...