fix typing on ie8
This commit is contained in:
parent
3565a06191
commit
d11b01c313
1 changed files with 42 additions and 18 deletions
|
|
@ -88,16 +88,37 @@ var TextInput = function(parentNode, host) {
|
|||
}
|
||||
}
|
||||
if (useragent.isOldIE) {
|
||||
event.addListener(text, "propertychange", function(e){
|
||||
if (text.value != "" && text.value != PLACEHOLDER)
|
||||
onInput(e);
|
||||
});
|
||||
var propchangeTimeout;
|
||||
var propertyChangeCounter = 0;
|
||||
var onPropertyChange = function(e){
|
||||
if (propertyChangeCounter)
|
||||
return;
|
||||
var data = text.value;
|
||||
if (inCompostion || !data || data == PLACEHOLDER)
|
||||
return;
|
||||
// can happen either after delete or during insert operation
|
||||
if (e && data == PLACEHOLDER[0]) {
|
||||
if (!propchangeTimeout) {
|
||||
propchangeTimeout = setTimeout(function() {
|
||||
onPropertyChange();
|
||||
propchangeTimeout = null;
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sendText(data);
|
||||
propertyChangeCounter++
|
||||
resetValue();
|
||||
propertyChangeCounter--
|
||||
}
|
||||
event.addListener(text, "propertychange", onPropertyChange);
|
||||
|
||||
var keytable = { 13:1, 27:1 };
|
||||
event.addListener(text, "keyup", function (e) {
|
||||
if (inCompostion && (!text.value || keytable[e.keyCode]))
|
||||
setTimeout(onCompositionEnd, 0);
|
||||
if ((text.value.charCodeAt(0)|0) < 129) {
|
||||
if ((text.value.charCodeAt(0)||0) < 129) {
|
||||
return;
|
||||
}
|
||||
inCompostion ? onCompositionUpdate() : onCompositionStart();
|
||||
|
|
@ -147,12 +168,7 @@ var TextInput = function(parentNode, host) {
|
|||
}
|
||||
};
|
||||
|
||||
var onInput = function(e) {
|
||||
if (inCompostion)
|
||||
return;
|
||||
var data = text.value;
|
||||
resetValue();
|
||||
|
||||
var sendText = function(data) {
|
||||
if (pasted) {
|
||||
resetSelection();
|
||||
if (data)
|
||||
|
|
@ -165,16 +181,24 @@ var TextInput = function(parentNode, host) {
|
|||
data = data.substr(2);
|
||||
else if (data[0] == PLACEHOLDER[0])
|
||||
data = data.substr(1);
|
||||
else if (data[data.length - 1] == PLACEHOLDER[0])
|
||||
data = data.slice(0, -1);
|
||||
// can happen if undo in textarea isn't stopped
|
||||
if (data[data.length - 1] == PLACEHOLDER[0])
|
||||
data = data.slice(0, -1);
|
||||
|
||||
if (data) {
|
||||
// can happen if undo in textarea isn't stopped
|
||||
if (data[data.length - 1] == PLACEHOLDER[0])
|
||||
data = data.slice(0, -1);
|
||||
if (data)
|
||||
host.onTextInput(data);
|
||||
}
|
||||
if (data)
|
||||
host.onTextInput(data);
|
||||
}
|
||||
};
|
||||
var onInput = function(e) {
|
||||
if (inCompostion)
|
||||
return;
|
||||
var data = text.value;
|
||||
resetValue();
|
||||
|
||||
sendText(data);
|
||||
};
|
||||
|
||||
var onCompositionStart = function(e) {
|
||||
inCompostion = true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue