7

通常、イベントにアクセスする必要がある場合は、コールバック関数で指定されたパラメーターを使用してアクセスします。

$button.live("click", function(ev) {
  // do something with ev here, like check 'ev.target'
}

しかし、代わりに(ここに入るには複雑すぎる理由で)、匿名のコールバック関数を使用したくありませんが、代わりに次のように呼び出す関数を指定します。

$button.live("click", functionToCall(ev, $(this));

したがって、functionToCall()のパラメーターとして「ev」を含めたことに気付くでしょうが、匿名のコールバック関数を使用していないため、これは明らかに機能しません。ただし、functionToCall()内でそのクリックイベントにアクセスする必要があります(ev.targetを確認するため)。私の質問は、このイベントにアクセスするにはどうすればよいですか?私がこのようなことをすることができればそれは素晴らしいでしょう:

$button.live("click", functionToCall($(this));

function functionToCall($item) {

   var target = $item.event("click").target;
   // do something with target
}

どんなアイデアでも大歓迎です。ありがとう。

4

4 に答える 4

14

元の答え

function test(eve) {
  alert(eve.type);
  alert(this);
  //$(this) if you need it as jQuery object
}
$([yourselector]).live("click", test);

パラメータでイベントを自動的に取得しeveます。


コメントの拡張質問への回答

パラメータを渡すと、少し難しくなります。なぜ私がこのようにしたのか説明が必要な場合は、お尋ねください。

function helper(customparam) {
    return function(eve, selector) { actualFunction(eve, selector, customparam, this) };
}

function actualFunction(eve, selector, customparam, self) {
    alert(eve.type);
    alert(selector);
    alert(customparam);
    alert(self); //self is now the element we clicked on
    //$(self) if you need it as jQuery object
    //using this won't work anymore as this is now window
}

$([yourselector]).live("click", helper([yourparameter]));
于 2009-11-25T17:38:51.707 に答える
2

匿名のコールバック関数内で関数を呼び出すことができます:

$button.live("click", function(ev) {
    functionToCall(ev, $(this));
}

編集:これはあなたがやろうとしていることだと思います(未テスト):

function handleClick(ev) {
    $(this).die("click");
    // ...whatever processing to do...
    $(this).live("click", handleClick);
}

$button.live("click", handleClick);

$(this)は、関数が呼び出されたボタン オブジェクトを参照すると思います。

于 2009-11-25T17:38:30.743 に答える
1

jQuerythisは、Functionメソッドcallまたはapplyを使用して、イベントハンドラーを呼び出すときに再割り当てすることに注意してください。したがって、functionToCallが呼び出されると、thisは$buttonのDOM要素になります。

var functionToCall(ev) {
    var $this = $(this);
    $this.die("click", functionToCall);
    // stuff
    $this.live("click", functionToCall);
}

$button.live("click", functionToCall);
于 2009-11-25T18:10:01.083 に答える
0
var mythis = $(this);
var callback = function(ev) {
    var target = mythis.event("click").target;
}


$button.live("click", callback);
于 2009-11-25T17:38:52.020 に答える