1

私は関数を書いています:

(function($) {
    $.fn.openBox = function(theId) {
    // do something
    };
})(jQuery);

そして、このように私の関数を呼び出すいくつかのリンク:

<a href="#" onclick="$(this).openBox('#theBoxId');">Open the box !</a>

return falseでデフォルトの動作を防ぐことができることはわかっています:

<a href="#" onclick="$(this).openBox('#theBoxId'); return false">Open the box !</a>

しかし、jQuery関数に入れたい... event.targetでテストしましたが、うまくいかないようです...

4

2 に答える 2

1

プラグインreturn false;内で、その値を属性で返すことができます。openBoxonclick

(function($) {
    $.fn.openBox = function(theId) {
        return false;
    };
})(jQuery);

その後:

<a href="#" onclick="return $(this).openBox('#theBoxId');">Open the box !</a>

ただし、これは理想とはほど遠いものです。jQuery は連鎖可能であることが期待されています。falseしかし、ではなく返すことでthis、次のことができなくなります$('foo').openBox().trigger('change')

あなたがすべきことは、イベントをjQueryの方法でアタッチし、イベントオブジェクトをキャプチャして呼び出すことpreventDefault()です:

jQuery.fn.openBox = function (id) {
    return this.on('click', function (e) {
        e.preventDefault();

        // now open your box `id`.
    });
}

$('a').openBox('#theBoxId');
于 2012-04-25T09:29:12.557 に答える
0

要素で使用する代わりにonclick、セレクターをデータ属性に配置します。

<a href="#" data-openbox="#theBoxId">Open the box !</a>

次に、そのデータを持つすべてのリンクのクリックイベントをバインドします。

$(function(){
  $('a[data-openbox]').click(function(e){
    e.preventDefault();
    var selector = $(this).data('openbox');
    // do something
  });
});

デモ: http: //jsfiddle.net/Guffa/EjLsQ/

于 2012-04-25T09:36:21.507 に答える