考えられる解決策の 1 つは、セルの内容をkeydown
隠しフィールドにコピーし、このフィールドの値を計算することです。
$("table input").on("keydown", function(e) {
$("#copy").text(this.value);
var width = $("#copy").outerWidth();
console.log("w: " + width);
var code = e.keyCode ? e.keyCode : e.which;
if (width > 50 && code !== 8 && code !== 49) {
return false;
}
});
私はそのようなソリューションでフィドルを作成しました: http://jsfiddle.net/scaillerie/hnRjB/2/。
注目すべき点は、font-family と font-size が と で同じである必要があることinput
ですdiv
。これは、正しい値を持つために、CSS ルールの理由です:
* {
font-family: arial;
font-size: 1em;
}
ただし、 の代わりに*
、必要に応じて制限する必要があります (たとえば、table input, #copy
)。
編集 :
このコードでは、ユーザーは入力の長さを超えて入力できますが、幅をテストするために、コピーしたフィールドに「長い」文字を追加できることに注意してください: http://jsfiddle.net/scaillerie/hnRjB /3/ .