maxlength
Jelly Beanは、テキスト入力用のHTMLの属性を好まないようです。入力文字数は確かに制限されますが、許可されている文字数を超えて入力しようとすると、テキストボックスが失敗します。これで、他のテキストボックスに入力できなくなり、そのテキストボックスに既に入力されている文字を削除することもできなくなります。
まだこれに直面していない場合は、簡単なHTMLで試して確認してください。これを解決するための手がかりがあれば教えてください。
maxlength
Jelly Beanは、テキスト入力用のHTMLの属性を好まないようです。入力文字数は確かに制限されますが、許可されている文字数を超えて入力しようとすると、テキストボックスが失敗します。これで、他のテキストボックスに入力できなくなり、そのテキストボックスに既に入力されている文字を削除することもできなくなります。
まだこれに直面していない場合は、簡単なHTMLで試して確認してください。これを解決するための手がかりがあれば教えてください。
アプリでも同じ問題が発生しました
今のところ、入力テキストとテキストエリアからすべての maxlength 属性を削除し、ユーザーが必要なテキストを超えて入力するのを防ぐ js で処理しました。ここでは、すべての入力テキストとテキストエリアに一意の ID があると想定しています。
コードはjsfiddleでも入手できます
$(document).ready(function () {
var ver = window.navigator.appVersion;
ver = ver.toLowerCase();
if ( ver.indexOf("android 4.1") >= 0 ){
var idMaxLengthMap = {};
//loop through all input-text and textarea element
$.each($(':text, textarea, :password'), function () {
var id = $(this).attr('id'),
maxlength = $(this).attr('maxlength');
//element should have id and maxlength attribute
if ((typeof id !== 'undefined') && (typeof maxlength !== 'undefined')) {
idMaxLengthMap[id] = maxlength;
//remove maxlength attribute from element
$(this).removeAttr('maxlength');
//replace maxlength attribute with onkeypress event
$(this).attr('onkeypress','if(this.value.length >= maxlength ) return false;');
}
});
//bind onchange & onkeyup events
//This events prevents user from pasting text with length more then maxlength
$(':text, textarea, :password').bind('change keyup', function () {
var id = $(this).attr('id'),
maxlength = '';
if (typeof id !== 'undefined' && idMaxLengthMap.hasOwnProperty(id)) {
maxlength = idMaxLengthMap[id];
if ($(this).val().length > maxlength) {
//remove extra text which is more then maxlength
$(this).val($(this).val().slice(0, maxlength));
}
}
});
}
});
この問題のバグはすでに35264で公開されています
ケースが非常に単純な場合は、次のようにhtml行に単純に追加することもできます。
<input type="text" class="abc" onkeypress="if(this.value.length > 9) return false;"/>
別のクラスを追加して最大長を制限する必要がある入力フィールドのキープレスを個別に処理し、そのクラスのキープレスをリッスンします。
HTML
<textarea ng-model="model " rows="3" maxlength="100" cols="70" class="custom_txtarea ng-pristine ng-valid charlength" placeholder="Achievements"></textarea>
Javascript
$(".charlength").keypress(function(event) {
if(event.which >= 32 || event.which == 13) {
var maxLength = event.currentTarget.maxLength;
var length = event.currentTarget.value.length;
if(length >= maxLength) {
event.preventDefault();
}
}
});
これは確かに開発者にとって悪夢のようなバグです:) 根本的な原因に気付き、「ああああ...」という瞬間を感じるまで。参考までに: このバグにより DOM のすべての入力フィールドがフリーズしますが、Javascript を使用して入力フィールドの値を操作および変更することはできました。
次の Android の問題を開きました: 35823。この問題が発生している場合は、注意を引いて解決できるようにスターを付けてください。