0
var nothover = function(){window.setTimeout(function() {
     $('#proFBfeel').hide();
      $('#proFBfeel .moreinfos').html('');
       $('.contact_pro').html('');
     },3000);
   };
  $('#proFBfeel').nothover();
    $('#proFBfeel').hover(function() {
        window.clearTimeOut(nothover);
     });
         $('html').click(function() {
           $('#proFBfeel').hide();
            $('#proFBfeel .moreinfos').html('');
             $('.contact_pro').html('');
          });

わかりました。変数を割り当てたのnothoverはsetTimeoutです。

3秒後、オブジェクトにカーソルを合わせない限り、関数を実行します。そして、タイムアウトをクリアするためにホバーされた場合。

次に、オブジェクトの外に戻って関数を再度実行するか、HTML要素をクリックしてオブジェクトを非表示にしない限り。

私には言われていますが、これは正しく実行されていません

Uncaught TypeError:Object[objectObject]にはメソッド'nothover'がありません

どうしてこれなの?そして、誰かが助けてくれるなら、私はこれに大いに感謝するでしょう。ヘルプとは、javascript関数のいくつかと、これらが正しく実行されることを確認する方法を説明することを意味します。

ありがとうございました

4

3 に答える 3

4

setTimeout値を返します。タイムアウトを「キャンセル」する場合は、に値を指定しclearTimeoutます。関数をに渡さないでくださいclearTimeout。それは何もしません。このスレッドの誰もそれに気づいていないようです。これに関するドキュメントは次のとおりです:clearTimeout

動作するコードは次のとおりです。

var notHover = function() {
   var timerId = setTimeout(function () {
      $('#proFBfeel').hide();
      $('#proFBfeel .moreinfos').html('');
      $('.contact_pro').html('');  
    }, 3000);

    // return a function which will cancel the timer
    return function () { clearTimeout(timerId); };
};

// start the timer.  We can call cancelTimer() if we want to cancel it
var cancelTimer = notHover();

$('#proFBfeel').hover(function() {
    // mouse in, cancel the notHoverTimer
    if (cancelTimer) {
        cancelTimer();
        cancelTimer= undefined;
    }
}, function () {
    // mouse out, start the timer again
    cancelTimer = notHover();
});

`` `

于 2013-03-04T05:43:22.803 に答える
1

jQueryオブジェクトにメソッドを追加するには、次のことを行う$.fn.nothover = function(){必要があります...関数式を変数に割り当てるだけで、jQueryに影響を与えることはありません。

于 2013-03-04T02:48:37.580 に答える
1
$.fn.nothover = function () {
    function hideIt() {
        this.hide();
        this.find(".moreinfos").html("");
    }
    this.hover(function () {
        window.clearTimeout(hideIt);
    });
    window.setTimeout(hideIt, 3000);
};

これはあなたがやろうとしていることに沿ったものですか...?

このコードでは、$.fnオブジェクトのプロパティを定義することでjQueryプラグインを定義しています。このプラグイン内で、ユーザーが問題の要素にカーソルを合わせない限りhideIt、3秒後に呼び出したいと思われるコードを含む関数を定義します。この場合、3秒のタイムアウトをクリアします。そうですか?

試行#2

たぶんこんな感じ…?

$.fn.nothover = function () {
    function initialize() {
        window.setTimeout(doSomething, 3000);
    }

    function doSomething() {
        // do something
    }

    this.hover(function () {
        window.clearTimeout(doSomething);
    }, initialize);

    initialize();
};

クローザー?

于 2013-03-04T03:00:08.507 に答える