onclick-eventと割り当てられた関数がすでにあるボタンがあります。その前に別の関数呼び出しを追加したいと思います。onclick属性()をいじることは可能だattr
と思いますが、これがベストプラクティスではないと思います。
既存のonclick-eventに関数呼び出しを追加するためのベストプラクティスは何だと思いますか?
onclick-eventと割り当てられた関数がすでにあるボタンがあります。その前に別の関数呼び出しを追加したいと思います。onclick属性()をいじることは可能だattr
と思いますが、これがベストプラクティスではないと思います。
既存のonclick-eventに関数呼び出しを追加するためのベストプラクティスは何だと思いますか?
jQuery の内臓をいじることを恐れないのであれば、次のようにします。
// "prepend event" functionality as a jQuery plugin
$.fn.extend({
prependEvent: function (event, handler) {
return this.each(function () {
var events = $(this).data("events"),
currentHandler;
if (events && events[event].length > 0) {
currentHandler = events[event][0].handler;
events[event][0].handler = function () {
handler.apply(this, arguments);
currentHandler.apply(this, arguments);
}
}
});
}
});
$("#someElement").prependEvent("click", function () {
whatever();
});
ライブでご覧ください: http://jsfiddle.net/Tomalak/JtY7H/1/
がすでに存在している必要があることに注意してくださいcurrentHandler
。そうしないと、関数は何も実行しません。
免責事項:これはハックだと思います。これは、ライブラリの次のバージョンで変更される可能性のある jQuery 内部に依存します。現在は動作していますが (jQuery 1.7.2 でテストしました)、jQuery の将来のバージョンで動作しなくなっても驚かないでください。
ここに短い例を書きました:
$("button").click(function() { // this is already existing
if ($("span").length) {
alert("ok");
}
});
var clicks = $("button").data("events").click.slice();
$("button")
.unbind("click")
.click(function() { // this is the new one which should be prepended
$("body").append($("<span>"));
});
$.each(clicks, function(i, v) {
$("button").click(v);
});
</p>
既存のonclickイベントに関数呼び出しを追加する方法はないと思いますが、これを試すことができます:
$('#foo').unbind('click');
$('#foo').click(function() {
// do new function call..
// call original function again...
});
それが役立つことを願っています。
単一のイベントに関数を追加できますが、onclick イベントで 2 つの関数を追加することは避けようとしています。代わりに、
1. 既存の関数に新しいコードを追加します。
2. 既存の関数から新しい関数への呼び出しを追加します。
このようにイベントをバインドした場合
$(elem).on('click', functionName);
次のように変更できます。
$(elem).on('click', function(){
anotherFunctionNameOrWhateverYouWant();
functionName();
});