1

次のようにリンクを警告する単純なクリックハンドラーがありますhref

<a id="link" href="http://www.google.com">Google</a>

$('a#link').on('click', function() {
  alert($(this).attr('href'));
});

別のクリック ハンドラーから呼び出すことができるように、関数 (およびその呼び出し方法) を分離するにはどうすればよいですか?

function showHref() {
  /* What to do here because $(this) won't resolve to <a> anymore. */
}

// I'd like a#another-link to be able to call that same function above.    
<a id="another-link" href="http://www.microsoft.com">Microsoft</a>

$('a#another-link').on('click', /* How to call showHref? */);

ありがとう。

4

3 に答える 3

1

次のように、関数ロジックを参照に入れることができます。

var handler = function () {
    alert($(this).attr('href'));
};

次に、その参照を使用してイベント リスナーを初期化できます。

$('#link').on('click', handler);

もちろん、それを再利用できます。

$('#some_other_link').on('click', handler);

または、イベント ハンドラー コンテキストの外で自分自身を呼び出します (イベント ハンドラー関数を作成している場合、通常は意味がありませんが、一般的にはラムダで実行できます)。

handler();

ただし、要素でイベントをトリガーするだけの場合は、対応するイベント トリガー関数を呼び出す必要があります。

$('#link').click();
// or
$('#link').trigger('click');
于 2012-05-02T08:18:14.397 に答える
0

あなたが書いた:

function showHref() {
  /* What to do here because $(this) won't resolve to <a> anymore. */
}

うーん、実際、そうでしょう。これはまさに、DOM イベントと、jQuery に登録されたイベント ハンドラーによってなされた約束です。

FWIW、コンテンツは次のようにする必要があります。

alert(this.href)

href要素の属性を取得するためだけに jQuery を呼び出す必要はありません。

于 2012-05-02T08:23:53.527 に答える