0

これまでのところ、私が持っているコードは次のとおりです。

function behaviourAdd (){
    $.ajax({
        url: base_url + "folders/jq_set_folder_as_behaviour/add/" + $("a#behaviour").data("folder"),
        success: function () {
            $('a#behaviour')
            .addClass('active')
            .attr('title', "Remove a Behaviour")
            .unbind('click')
            .bind('click', behaviourRemove);
        }
    });
}

function behaviourRemove (){
    $.ajax({
        url: base_url + "folders/jq_set_folder_as_behaviour/remove/" + $("a#behaviour").data("folder"),
        success: function () {
            $('a#behaviour')
            .removeClass('active')
            .attr('title', "Add a Behaviour")
            .unbind('click')
            .bind('click', behaviourAdd);
        }
    });
}

if($('a#behaviour').hasClass('active') == true) {
    $('a#behaviour').bind('click', behaviourRemove);
} else {
    $('a#behaviour').bind('click', behaviourAdd);
}

すべてが完璧に機能します。ただし、デフォルトのクリック動作を防止しようとしていますが、試したことはすべて失敗します。

多くの検索の後、私が見つけることができる唯一のコンテキストは次のとおりです。

$("a#behaviour").click(function(event){
  event.preventDefault();
});

名前付き関数を使用しているため、これは私には当てはまりません。これが機能しない理由だと思います。

イベントデータを渡すことはできますが:

$('a#behaviour').bind('click', behaviourRemove(event));

いずれかの関数内で使用するとすぐにエラーが発生します。

function behaviourAdd (e){
    e.preventDefault();
    ...
}

だからどんな助けも大歓迎です。

4

2 に答える 2

4

event「名前付き関数」でパラメーターを受け入れることができます:

function behaviourRemove (event){
   event.preventDefault();

イベント処理を次のように設定すると、behaviourRemove に渡されます。

$('a#behaviour').bind('click', behaviourRemove);

余談ですが、よりも使用する方が高速$('#behaviour')です$('a#behaviour')

于 2013-05-25T10:00:14.333 に答える
0

戻り値をfalseにするだけです

function behaviourAdd (){
    return false;
    -------------
}

名前付き関数で predefault メソッドを使用することもできます

function behaviourRemove (e){
    e.preventDefault();
    -------- 
}
于 2013-05-25T09:59:34.050 に答える