2016-05-11 6 views
0

私は<input type="email">を持っており、ユーザーはInternationalized Domain Name、角度入力した場合(EDIT:それは角度のせ​​いではない以外 - 詳細についてはmy answerを参照)は自動的にいいですpunycodeに値を変換し、値が表示された場合、ユーザーにとって非常に混乱します。例えば。防止角度からのメールの入力にマングリング

[email protected]ábc.com 

バックエンドは、ドメインの本来のUnicodeバージョンを期待しているときにも問題が発生し、角度アプリが代わりPunycodeでバージョンを送り

[email protected] 

になります。

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>[email protected]á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>

答えて

1

せずにそれを試してみてください(Safariがないは、同じ動作を持っている他のブラウザをテストしていないん)。ここでは、角なしで起こった例だ例Input type email value in Chrome with accented characters wrong

を参照してください - Chromeでこれを試してみてください。

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

だから短い答えはノーである、角度を経てこれを止める方法はありません - 現在のところ、Chromeにもそうしないよう指示する方法はないようです。

0

とすぐに入力タイプemailng-modelを使用して、angularjsは、入力時にその魔法を使用します。

はそれがChromeの、それは結局のところ、それはそれをやっているという角度ではありませんNG-モデル

+0

しかし、私は入力を私のモデルにバインドしたいのですが、 'ng-model'を使わないとどうしたらいいですか? – CupawnTae

+1

ng-changeを使ってスコープ変数にバインドできますが、いくつかのドキュメントを読むことができます。角度ジェネレータが入力メールに魔法をかけるのを防ぎながらng-modelを使う方法がなければならない –

+1

あなたが興味がある場合に備えてAngularの誤りではないことが判明 - その旨の回答を掲載 – CupawnTae

関連する問題