、、、およびイベントを1行keyup
で同じ関数を呼び出す方法はありますか、それとも別々に行う必要がありますか?keypress
blur
change
私が抱えている問題は、dbルックアップを使用して一部のデータを検証する必要があり、データが入力されているかボックスに貼り付けられているかに関係なく、検証を見逃さないようにする必要があることです。
、、、およびイベントを1行keyup
で同じ関数を呼び出す方法はありますか、それとも別々に行う必要がありますか?keypress
blur
change
私が抱えている問題は、dbルックアップを使用して一部のデータを検証する必要があり、データが入力されているかボックスに貼り付けられているかに関係なく、検証を見逃さないようにする必要があることです。
.on()
関数を複数のイベントにバインドするために使用できます。
$('#element').on('keyup keypress blur change', function(e) {
// e.type is the type of event fired
});
または、関数をパラメーターとして通常のイベント関数に渡すだけです。
var myFunction = function() {
...
}
$('#element')
.keyup(myFunction)
.keypress(myFunction)
.blur(myFunction)
.change(myFunction)
jQuery 1.7以降、この.on()
メソッドは、イベントハンドラーをドキュメントにアタッチするための推奨されるメソッドです。以前のバージョンでは、この.bind()
メソッドはイベントハンドラーを要素に直接アタッチするために使用されていました。
$(document).on('mouseover mouseout',".brand", function () {
$(".star").toggleClass("hovered");
})
jQueryが一度に複数のイベントをリッスンするときにイベントタイプを取得する方法を探していましたが、Googleが私をここに配置しました。
だから、興味のある人のために、event.type
私の答えは:
$('#element').on('keyup keypress blur change', function(event) {
alert(event.type); // keyup OR keypress OR blur OR change
});
詳細については、jQueryドキュメントをご覧ください。
bindメソッドを使用して、関数を複数のイベントにアタッチできます。次のコードのように、イベント名とハンドラー関数を渡すだけです。
$('#foo').bind('mouseenter mouseleave', function() {
$(this).toggleClass('entered');
});
別のオプションは、jqueryapiのチェーンサポートを使用することです。
同じイベントハンドラーを複数のイベントにアタッチすると、複数のイベントが同時に発生するという問題が発生することがよくあります(たとえば、ユーザーが編集後にTabキーを押すと、キーダウン、変更、ぼかしがすべて発生する可能性があります)。
あなたが実際に欲しいものは次のようなもののように聞こえます:
$('#ValidatedInput').keydown(function(evt) {
// If enter is pressed
if (evt.keyCode === 13) {
evt.preventDefault();
// If changes have been made to the input's value,
// blur() will result in a change event being fired.
this.blur();
}
});
$('#ValidatedInput').change(function(evt) {
var valueToValidate = this.value;
// Your validation callback/logic here.
});
これが私のやり方です。
$("input[name='title']").on({
"change keyup": function(e) {
var slug = $(this).val().split(" ").join("-").toLowerCase();
$("input[name='slug']").val(slug);
},
});
再利用したい関数を次のように定義できます。
var foo = function() {...}
そして後で、以下に示すように、on('event')を使用して、オブジェクトに必要な数のイベントリスナーを設定し、間にスペースを残してその関数をトリガーできます。
$('#selector').on('keyup keypress blur change paste cut', foo);
、、、、およびイベントが1行
keyup
で同じ関数を呼び出す方法はありますか?keypress
blur
change
.on()
次の構造を受け入れる、を使用.on( events [, selector ] [, data ], handler )
することができます。したがって、このメソッドに複数のイベントを渡すことができます。あなたの場合、それはこのように見えるはずです:
$('#target').on('keyup keypress blur change', function(e) {
// "e" is an event, you can detect the type of event using "e.type"
});
そして、これが実際の例です:
$('#target').on('keyup keypress blur change', function(e) {
console.log(`"${e.type.toUpperCase()}" event happened`)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="target">
Tatuの答えは、私が直感的にそれを行う方法ですが、この方法でイベントをネスト/バインドする方法では、InternetExplorerでいくつかの問題が発生しました.on()
。
これが問題となっているjQueryのバージョンを正確に特定することはできませんでした。しかし、次のバージョンで問題が発生することがあります。
私の回避策は、最初に関数を定義することでした。
function myFunction() {
...
}
その後、イベントを個別に処理します
// Call individually due to IE not handling binds properly
$(window).on("scroll", myFunction);
$(window).on("resize", myFunction);
これは最も美しい解決策ではありませんが、私にとってはうまくいきます。この問題に遭遇する可能性のある他の人を助けるために、そこにそれを出すと思いました。
$("element").on("event1 event2 event..n", function() {
//execution
});
このチュートリアルは、複数のイベントの処理に関するものです。
jQueryのような大きなライブラリを使用せずに組み込みのDOMメソッドを使用してこれを実装するのは簡単です。必要に応じて、もう少しコードが必要です。イベント名の配列を繰り返し処理し、それぞれにリスナーを追加します。
function validate() {
// ...
}
const element = document.querySelector('#element');
['keyup', 'keypress', 'blur', 'change'].forEach((eventName) => {
element.addEventListener(eventName, validate);
});