新版本的FF改变了输入属性的顺序
new version of FF changed order for attributes in input
我期望元素中属性的顺序可以改变,尽管html中的顺序(只有FF 43.0.1)。例子:
<input type="checkbox" data-type="can-be-also-empty"/>
请先在Chrome中运行片段,然后在FF中运行。
来自devtools的结果:
<input data-type="can-be-also-empty" type="checkbox"/>
- FF
<input type="checkbox" data-type="can-be-also-empty"/>
- Chrome
这可以通过使用angular来影响。自定义指令指南
Angular规范了元素的标签和属性名,以确定哪些元素匹配哪些指令
规范化过程如下:从元素/属性的前面去掉x和data。
这就是为什么我认为,如果data-type
属性在元素中首先出现,角度剥离data-
并影响type="checkbox"
到type="can-be-also-empty"
。
下一个片段可以更好地展示我的意思:
angular.module('app', []).directive('example', function(){
return {
template: '<input type="checkbox" data-type="eny-value" ng-model="value"/><p>{{value}}</p>',
restrict: 'E',
link: function($scope){
$scope.value = false;
}
}
})
<!DOCTYPE html>
<html ng-app='app'>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title></title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>
<example></example>
</body>
</html>
也尝试在FF和Chrome中运行,表达式将不会在FF中评估。
下一步,将data-type="eny-value"
移动到type
之前。
问题来自于AngularJS如何匹配指令。在本例中,它是关于input[checkbox]
的,它的匹配来自type
属性。根据AngularJS的指令文档,它可以从type
和data-type
中匹配,所以当angular根据属性的顺序规范化数据类型时,它会覆盖之前的值(也就是checkbox
)。
这种行为导致input[checkbox]
永远不会像预期的那样工作,所以ngModel
永远不会接收到选中字段的值。
最好的方法是不要使用这样的东西,不要使用符合angularjs规范化的属性
- 如何在 JavaScript 中以递增顺序在对象中添加属性
- JavaScript:指定对象中属性的顺序
- 如何像java脚本中给定的对象一样,将对象的属性保持在相同的顺序
- 如何根据GeoJSON属性中的ID号设置下拉列表项的顺序
- 对象属性的分配顺序是否与声明顺序相同
- 如何在主干中对列表进行排序时更新模型的顺序属性
- 属性更改发生顺序的角度事件
- 更改按自定义属性排序的对象数组的顺序
- Jquery根据id属性按特定顺序添加类/Removeclass
- 使用jQuery根据属性值将元素按正确顺序移动
- AngularJS中多属性指令的编译和链接顺序
- MongoDB$sort聚合的Javascript属性顺序
- 根据数组的一个属性按字母顺序对数组中的对象进行排序
- Javascript更改标签属性时没有按正确的顺序执行
- JavaScript和/或JSON要求解析器按定义顺序枚举属性吗?
- 使用javascript按属性和特定顺序排列对象
- 在脚本标签中,属性的顺序重要吗?
- 新版本的FF改变了输入属性的顺序
- HTML标签中的属性顺序
- 对.in循环跟踪Object的属性顺序