gpt4 book ai didi

angularjs - 防止 Angular 破坏电子邮件输入

转载 作者:行者123 更新时间:2023-11-28 03:16:48 26 4
gpt4 key购买 nike

如果我有 <input type="email"> ,用户输入Internationalized Domain Name ,Angular (编辑:除非这不是 Angular 的错误 - 有关详细信息,请参阅 my answer) 自动将值转换为 punycode ,这是一个很好的功能,但如果将值显示给用户,用户会感到非常困惑。例如

abc@ábc.com

变成了

abc@xn--bc-lia.com

当后端期望域的原始 Unicode 版本,而 Angular 应用程序改为发送 punycode 版本时,它也会导致问题。

我可以使用例如punycode.js将其转换回来,但是有没有办法在 Angular 中执行此操作而不涉及另一个库 - 要么告诉 Angular 不要进行编码,要么随后获取原始值?

var myApp = angular.module('myApp',[]);

function thing($scope) {
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp">
<p>Copy this text into the input:</p>
<p>abc@ábc.com</p>
<div ng-controller="thing">
<input id="inp" type="email" class="form-control" ng-model="addr">
<p>Model gets: {{addr}}</p>
</div>
</body>

最佳答案

事实证明,这不是 Angular 做的,而是 Chrome 做的(Safari 没有有相同的行为,没有测试过其他浏览器)。例如,参见Input type email value in Chrome with accented characters wrong

这是一个在没有 Angular 的情况下发生的示例 - 在 Chrome 中尝试一下:

function update() {
document.getElementById('output').innerText = document.getElementById('inp').value
}
<p>Copy this text into the input:</p>
<p>abc@ábc.com</p>
<div ng-controller="thing">
<input id="inp" type="email" onchange="update()">
<p>Browser says: <span id="output"></span></p>
</div>

所以简短的回答是否定的,没有办法通过 Angular 来阻止这种情况 - 目前似乎也没有办法告诉 Chrome 不要这样做。

关于angularjs - 防止 Angular 破坏电子邮件输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59558490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com