Skip to content

Commit 1757433

Browse files
committed
fix(input): patched input cjk binding bug
Related angular#12659
1 parent 728f7e2 commit 1757433

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

src/ng/directive/input.js

+21-3
Original file line numberDiff line numberDiff line change
@@ -1046,17 +1046,35 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
10461046
stringBasedInputType(ctrl);
10471047
}
10481048

1049+
function isKanji(c) {
1050+
if (!c || c.length == 0) return false;
1051+
var code = c.charCodeAt(0);
1052+
if (code > 11904 && code < 12031) return true; //CJK Radicals Supplement
1053+
if (code > 12352 && code < 12543) return true; //Hiragana
1054+
if (code > 12736 && code < 19903) return true;
1055+
if (code > 19968 && code < 40959) return true; //CJK Unified Ideographs
1056+
if (code > 44032 && code < 55215) return true; //Hangul Syllables
1057+
if (code > 63744 && code < 64255) return true; //CJK Compatibility Ideographs
1058+
if (code > 65072 && code < 65103) return true; //CJK Compatibility Forms
1059+
if (code > 131072 && code < 173791) return true;
1060+
if (code > 194560 && code < 195103) return true;
1061+
return false;
1062+
}
1063+
10491064
function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
10501065
var type = lowercase(element[0].type);
10511066

10521067
// In composition mode, users are still inputing intermediate text buffer,
10531068
// hold the listener until composition is done.
10541069
// More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
10551070
if (!$sniffer.android) {
1056-
var composing = false;
1071+
var composing = false,
1072+
msie11 = msie === 11,
1073+
isCJK = false;
10571074

10581075
element.on('compositionstart', function(data) {
1059-
composing = true;
1076+
composing = !msie11 && true;
1077+
element.fire("compositionend");
10601078
});
10611079

10621080
element.on('compositionend', function() {
@@ -1070,7 +1088,7 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
10701088
$browser.defer.cancel(timeout);
10711089
timeout = null;
10721090
}
1073-
if (composing) return;
1091+
if (!msie11 && !isCJK && composing) return;
10741092
var value = element.val(),
10751093
event = ev && ev.type;
10761094

0 commit comments

Comments
 (0)