各回答にはいくつかの点が欠けているので、ここに私の解決策があります:
$("#input").on("input", function(e) {
var input = $(this);
var val = input.val();
if (input.data("lastval") != val) {
input.data("lastval", val);
//your change action goes here
console.log(val);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
<p>Try to drag the letters and copy paste</p>
Input Event
上の火災キーボード入力、マウスのドラッグ、オートフィルやコピー&ペースト ChromeとFirefoxの上でテスト。以前の値をチェックすると、実際の変更が検出されます。つまり、同じものを貼り付けたり、同じ文字を入力したりしても、発火しないということです。
作業例:http : //jsfiddle.net/g6pcp/473/
更新:
そしてchange function
、ユーザーが入力を完了したときにのみ実行して、変更アクションが何度も実行されないようにしたい場合は、これを試すことができます:
var timerid;
$("#input").on("input", function(e) {
var value = $(this).val();
if ($(this).data("lastval") != value) {
$(this).data("lastval", value);
clearTimeout(timerid);
timerid = setTimeout(function() {
//your change action goes here
console.log(value);
}, 500);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
ユーザーが入力を開始すると(例: "foobar")、このコードはユーザーが入力change action
するすべての文字に対して実行するのを防ぎ、ユーザーが入力を停止したときにのみ実行されます。これは、サーバーに入力(例:検索入力)を送信するときに特に役立ちます。 wayサーバーはありません一つだけの検索foobar
ではなく6を検索しf
、その後とfo
、その後、foo
およびfoob
等々を。