Имитация maxlength с японскими символами для textarea в ie8-
Я пытаюсь смоделировать поведение HTML5 для максимальной длины для текстовой области в более низких версиях Internet Explorer (ie8, ie7):
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<textarea maxlength="200"></textarea>
<script type="text/javascript">
$(document).ready(function() {
$(document).delegate('textarea[maxlength]', 'keyup paste change', function(e) {
var limit = parseInt($(this).attr('maxlength'));
var text = $(this).val();
var chars = text.length;
if(chars > limit){
var new_text = text.substr(0, limit);
$(this).html(new_text);
}
});
});
</script>
Проблема заключается в том, что если я введу 201 японский символ, текстовое поле будет корректировать текст так, чтобы отображать только первые 200 символов, как и ожидалось, но затем, когда текстовое поле теряет фокус при моем нажатии, текстовое поле будет отображать только текст. 201-й японский персонаж. Эта проблема не возникает, если вы вводите 201-й символ в качестве английского символа. Я ввожу японские символы с помощью Windows японского IME, на случай, если это уместно.
ETA: Сейчас я считаю, что это проблема с Javascript, который плохо играет с японским IME, но я до сих пор не знаю, как его исправить.
1 ответ
Такое поведение почти наверняка связано с тем, что японский IME изменяет ввод после запуска различных событий Javascript. Лучшее решение, которое я нашел, - это изменить приведенный выше код так, чтобы он вызывался событием "размытия", так как "размытие", кажется, всегда происходит после того, как японский IME завершил редактирование.