私は動的に追加された入力フィールドで、小数点(Numpadドット)をキーボードポイント/フルストップ(キーボードドット)に置き換えるjQueryコードを持っています。入力フィールドと値を1つずつ追加するとうまくいきます。たとえば、入力フィールドが1つ追加され、値が入力された後、カーソル位置が変更され(矢印、クリック)、小数点が入力されます。私は複数の入力フィールドを作成するたび複数のトリガーを防止するために、私の代表団をどのように変更する必要がありますか?
問題
しかし、コードは値文字列の最後に複数のドットを入力環境を開始し、試してみて、ドットを追加した値で(手動で)それらを移入し、 /小数点がそれぞれに入ります。
私が委任している方法のせいでこの問題が起こっていると思いますが、それが本当に原因であるかどうかは不明ですし、そうであれば、変更する方法は常にユーザーと同じくらい多くなりますタイプ(通常、カーソルの1つ)。
委任が問題でない場合は、どのようにこれにアプローチし、変更する必要がありますか? string replace()はオプションではありません。私はfocus
とchange
の交換
- を試してみた、そしてそれはまだ少し良い(最終的には以下の点)であった
$(this).keydown(function(e)
と$('input').keydown(function(e)
を、交換 - 同じ ように振る舞っ
物事しかし、それでも最後に追加のドットが作成されました
以下のスニペットはエラーをスローしますr(結果の一部を隠しています)が、エラーの内容は不明です。より良い表示のために、オリジナルjsFiddleをご覧ください。
$('div').on('click', '#remove', removeMe());
$('body').on('change', 'input', function(e) {
$('input').keydown(function(e) {
var keyChar = e.keyCode;
if(keyChar==110) { // if it's a decimal point
e.preventDefault();
var place = $(this)[0].selectionStart; // cursor position
var newVal = $(this).val().toString().split(""); // converting input to string, then to array
newVal.splice(place,0,"."); // inserting ".", instead of decimal point
newVal = newVal.join(""); // converting it back to a string
$(this).val(newVal); // setting it as the value - stays a string
}
/* keyCode info */
$('p').append(keyChar+" ");
/* */
});
});
$('#add').click(function() {
var parent = $(this).parent();
var newInput = $('<input type="text" class="test">');
parent.append(newInput);
});
function removeMe() {
$('#remove').on('click', function() {
var parentDiv = $(this).parent();
parentDiv.children().remove('input:last-child');
$('p').empty();
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div>
<button id="add">add</button>
<button id="remove">remove</button>
<p></p>
</div>
私は単にそれを追加することはできません、カーソルの位置は重要です。ユーザーが35を入力し、その後、クリックしたり、矢印を使用して3〜5の間に位置したり、ドットを入力したりするとどうなりますか?そのため、値を文字列に変換してから配列に変換し、次にドットでarray.splice()を実行してから、すべてを文字列に結合する必要があります。おそらくもっと良い方法がありますが、私はそれを見ていません。 : – FiddlingAway
ああ、そうです、私はコードを編集しました – Janar
これはうまくいくようですが、私はこれについて 'array.slice()'を使うことについても考えていませんでした。私のコードで。時間を割いてくれてありがとう。 – FiddlingAway