-1

クリックイベントにバインドされた通常のトグル関数がある場合

$('#work-content a').toggle(
    function() {
        // first click stuff
    }, function() {
        // second click stuff
    }
);

しかし、$(document).clickどういうわけか、イベントを2番目の関数にバインドする必要もあります。私の論理はおそらくオフなので、新しい解決策が必要だと確信しています。

機能は、1)リンクがクリックされたときに何かを実行し、次に2)リンクが再度クリックされたとき、または#work-contentdivの外側がクリックされたときに反対のことを実行します。

4

3 に答える 3

1

トグル関数はdivの表示/非表示に使用され、イベントの状態を維持するために使用しないでください。これには別のローカル変数を使用し、2つの関数を定義して、2つの異なるアクションを実行し、関数ポインターをイベントリスナーへのコールバックとして渡します。

したがって:

var linkClicked=false;

function fun1(){}

function fun2(){}

$('#work-content a').click(
    function() {
        if(!linkClicked)
          fun1();
        else
          fun2();
    });
$("body").click(function(){
  if($(event.target).closest("#work-content")===null)  //to make sure clicking inside your div does not trigger its close
  {
    fun2();
  }
});
于 2012-04-17T00:38:22.577 に答える
1

匿名関数を抽出して名前を付けるだけです。

var thatFunction = function () {
    ...
}

$('#work-content a').toggle(
    function() {
        // first click stuff
    },
    thatFunction);

$(document).click(thatFunction);
于 2012-04-17T00:34:41.763 に答える
0
linkClicked = false;    
$('#work-content .pic a').click(function(event) {
    event.preventDefault();

    var c = $(this);

    if (!linkClicked) {
        values = workOpen($(this));
    } else {
        workClose(c, values);
    }

    $('body').one('click',function() {
        workClose(c, values);
    });

});

このソリューションは、まさに私がその価値に必要なものでした。

于 2012-04-17T22:12:47.087 に答える