0

各DIVにmouseenterイベントを追加するための次の設定があります。

  $(document).ready(function () {
  $('div[id^=domainEnter]').mouseenter(function () {


                toggleSearchDisplay($(this).attr('domaincount'), 'show');

            });
 });

次に、この関数を定義します。

  function toggleSearchDisplay(num, showhide) {

            if ($('div[id=domainDiv' + num + ']').css('display') == "block" || showhide == "hide") {
                $('div[id=domainDiv' + num + ']').hide('fast');
                $('a[id = domainLink' + num + ']').text('+');
                $('input[id ^= SearchControls_' + num + '__SearchControlVisible]').val('false');
            } else {

                $('div[id=domainDiv' + num + ']').show('fast');
                $('a[id = domainLink' + num + ']').text('-');
                $('input[id ^= SearchControls_' + num + '__SearchControlVisible]').val('true');


            }
        }

これはすべてうまく機能し、必要なことを実行しますが、最初のブロックのMouseEnterビットでタイムアウト/遅延設定を取得しようとしています...これを試しましたが、実行されません:

$('div[id^=domainEnter]').mouseenter(setTimeout(function () {

                toggleSearchDisplay($(this).attr('domaincount'), 'show');

            },1000));

次に、これを試しましたが、実行されますが、遅延はありません...正常に実行されます。

 $('div[id^=domainEnter]').mouseenter(function () {

            setTimeout(toggleSearchDisplay($(this).attr('domaincount'), 'show'),1000);

        });

どうしたらいいのかわからない…何か考えは?

4

1 に答える 1

1

最初の試行では、引数として関数を指定するmouseenterのではなく、の結果setTimeout、つまりタイマーを指定します。

2つ目は、に提供されたコールバックsetTimeoutが実行されるときthisのウィンドウです。

これを修正する方法は次のとおりです。

$('div[id^=domainEnter]').mouseenter(function(){
     var $this = $(this);
     setTimeout(function () {
        toggleSearchDisplay($this.attr('domaincount'), 'show');
     },1000)
});
于 2012-09-10T19:18:14.213 に答える