5

onclick-eventと割り当てられた関数がすでにあるボタンがあります。その前に別の関数呼び出しを追加したいと思います。onclick属性()をいじることは可能だattrと思いますが、これがベストプラクティスではないと思います。

既存のonclick-eventに関数呼び出しを追加するためのベストプラクティスは何だと思いますか?

4

6 に答える 6

10

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 の将来のバージョンで動作しなくなっても驚かないでください。

于 2012-04-16T07:07:38.077 に答える
6

ここに短いを書きました:

​$("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>

于 2012-04-16T06:52:18.693 に答える
2

既存のonclickイベントに関数呼び出しを追加する方法はないと思いますが、これを試すことができます:

$('#foo').unbind('click');
$('#foo').click(function() { 
   // do new function call..
   // call original function again...
});

それが役立つことを願っています。

于 2012-04-16T06:43:53.490 に答える
1

単一のイベントに関数を追加できますが、onclick イベントで 2 つの関数を追加することは避けようとしています。代わりに、
1. 既存の関数に新しいコードを追加します。
2. 既存の関数から新しい関数への呼び出しを追加します。

于 2012-04-16T06:41:59.273 に答える
-2

このようにイベントをバインドした場合

$(elem).on('click', functionName);

次のように変更できます。

$(elem).on('click', function(){

 anotherFunctionNameOrWhateverYouWant();

 functionName();
});
于 2012-04-16T06:42:41.467 に答える