2

以下のコードは、スライド メニューを作成するために使用します。クリック イベントに関連付けられている関数のバインドを解除し、もう一度関連付ける方法を知る必要があります。(jQuery 1.7.2 を使用)

$(document).ready(function(){
    $('.section').hide();
    $('.header').click(function(){
      if($(this).next('.section').is(':visible'))
      {
        $('.section:visible').slideUp()              
        $('.arrows:visible').attr("src","right.gif")
      }
      else
      {
        $('.section').slideUp();
        $(this).next('.section').slideToggle();
        $(this).find('.arrows').attr("src","down.gif")
    });
});

以下のコードは私がこれまでに持っているものです

$('#printVers').click(function(){
   if($('#formVersion').val() != "Print")
   {
     $('.header').unbind('click');
   }
   else
   {
     //else re-attach functionality?
   }
});

ありがとう

4

7 に答える 7

7

名前付き関数を作成するだけです。ここでローテクになり、基本に戻って特定のイベントをアンバインドして再アタッチすることができます。

function doStuff()
{
    if($(this).,next('.section').is(':visible'))
        ...
}

$('.header').on('click', doStuff);
$('.header').off('click', doStuff);
于 2012-04-27T14:55:05.323 に答える
2

バインドを解除して再バインドする代わりに、単純なクラスを追加して.header、クリック ハンドラーでそのクラスを確認することをお勧めします。下記参照、

$('#printVers').click(function(){
   if($('#formVersion').val() != "Print")
   {
     $('.header').addClass('dontClick');
   } else  {
     $('.header').removeClass('dontClick');
   }
});

.headerクリック ハンドラーでは、

$('.header').click(function(){
     if ($(this).hasClass('dontClick')) {
        return false;
     }
     //rest of your code

アンバインドとバインドが必要な場合は、ハンドラーを関数に移動して、関数を何度でもアンバインド/バインドできます。

于 2012-04-27T14:54:36.877 に答える
1

このようなことを試すことができます。

$('#printVers').click(function(){
   if($('#formVersion').val() != "Print")
   {
       $('.header').addClass('clickDisabled');
   }
   else
   {
       $('.header').removeClass('clickDisabled');
   }
});

And then in the click handler check for this class.

$(document).ready(function(){
    $('.section').hide();
    $('.header').click(function(){
        if(!$(this).hasClass('clickDisabled')){
            ...
            ...
        }
    });
});
于 2012-04-27T14:56:48.513 に答える
0

その一番上のセクションを関数にして、elseステートメントで呼び出してみませんか?

于 2012-04-27T14:55:30.287 に答える
0

変数をフラグとして設定してみてください。次に、要素var canClick = ($('#formVersion').val() != 'Print');のクリック ハンドラーで、コードを実行する前に が true かどうかを確認します。.headercanClick

それでもハンドラーを削除したい場合は、events オブジェクトを変数に割り当てることができます。var eventObj = #('.header').data('events');これにより、そのオブジェクトに割り当てられたすべてのハンドラーを持つオブジェクトが得られます。クリックイベントを再割り当てするには、次のようになります$('.header').bind('click', eventObj.click[0]);

于 2012-04-27T14:57:11.773 に答える
-2

すべてのコードを.click別の関数の下に置くことができます

function headerClick(){
  if($(this).next('.section').is(':visible'))
  {
    $('.section:visible').slideUp()              
    $('.arrows:visible').attr("src","right.gif")
  }
  else
  {
    $('.section').slideUp();
    $(this).next('.section').slideToggle();
    $(this).find('.arrows').attr("src","down.gif")
  }
}

次に、次のようにバインドします。

$(document).ready(function(){
    $('.section').hide();
    $('.header').click(headerClick);
});

$('#printVers').click(function(){
   if($('#formVersion').val() != "Print")
   {
       $('.header').unbind('click');
   }
   else
   {
       $('.header').click(headerClick);
   }
});
于 2012-04-27T14:55:46.687 に答える