私は他の多くの質問を見て、以下のコードを含む非常に単純な答えを見つけました。誰かがテキストボックスの内容を変更したときにそれを検出したいだけですが、何らかの理由でそれが機能していません...コンソールエラーが発生しません。ブラウザのchange()
関数にブレークポイントを設定したときに、ヒットしません。
$('#inputDatabaseName').change(function () {
alert('test');
});
<input id="inputDatabaseName">
このようにjQueryのようにoninput
イベントを使用することができます:
$('#inputDatabaseName').on('input',function(e){
alert('Changed!')
});
純粋なJavaScriptで
document.querySelector("input").addEventListener("change",function () {
alert("Input Changed");
})
またはこのように:
<input id="inputDatabaseName" onchange="youFunction();"
onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();"/>
変更の代わりにキーアップを試してください。
<script type="text/javascript">
$(document).ready(function () {
$('#inputDatabaseName').keyup(function () { alert('test'); });
});
</script>
これが .keyup()の公式jQueryドキュメント です。
それぞれの答えにはいくつかの点が欠けているので、これが私の解決策です:
$("#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
ユーザーが入力を終えたときのみを実行して、changeアクションを何度も実行しないようにするには、次のようにします。
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
がすべてのレターユーザータイプに対して実行されるのを防ぎ、ユーザーがタイピングを止めるときにのみ実行されます。そのようにして、サーバーは1つだけを検索してfoobar
を検索し、6回はf
を検索してからfo
を検索し、次にfoo
およびfoob
を検索しません。
テキスト入力はフォーカスがなくなるまでchange
イベントを発生させません。入力の外側をクリックすると警告が表示されます。
テキスト入力がフォーカスを失う前にコールバックが起動するべきなら、 .keyup()
イベントを使用してください。
ブラウザがテキストボックスに自動入力を実行すると、onkeyup, onpaste, onchange, oninput
が失敗するようです。このような場合に対処するには、テキストフィールドに "autocomplete='off'
"を含めて、ブラウザがテキストボックスに自動入力しないようにします。
例えば、
<input id="inputDatabaseName" autocomplete='off' onchange="check();"
onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();" />
<script>
function check(){
alert("Input box changed");
// Things to do when the textbox changes
}
</script>
私の場合、日付ピッカーに添付されたテキストボックスを持っていました。私のために働いた唯一の解決策はdatepickerのonSelectイベントの中でそれを扱うことでした。
<input type="text" id="bookdate">
$("#bookdate").datepicker({
onSelect: function (selected) {
//handle change event here
}
});
keydown
も使えると思います:
$('#fieldID').on('keydown', function (e) {
//console.log(e.which);
if (e.which === 8) {
//do something when pressing delete
return true;
} else {
//do something else
return false;
}
});