Çalışmak için kullanıcı etkileşimi ile jQuery .mouseenter () /. Mouseleave () komut dosyası alma sorunları

İlk olarak, başlık için özür dilerim, uygun bir düşünemedim.

Aşağıdaki kod içinde hide() işlevinin neden tetiklendiğinde firebug'da neden hatalı olduğunu anlayamadığımdan emin değilim, bu kusuru giderdiğimde kodun geri kalanı iyi çalışacağından eminim, herhangi bir yardım/öneri takdir edilecektir .

Firebug Console hatası:

hide is not defined
it-services() it-services (line 396)
time = setTimeout("hide()",3000); 

Şimdiye kadar sahip olduğum kod:

        var time;

        $("#form").mouseenter(function() {
            clearTimeout(time);
            $(this).delay(800).animate({
                right: 0
            }, 2000);
        }).mouseleave(function() {
            function hide() {
                $(this).delay(800).animate({
                    right: "-325px"
                }, 1000);
            }
            time = setTimeout(hide,3000);
        });

Her türlü yardım için şimdiden teşekkür ederim,

Dan.

1

2 cevap

setTimeout kullanarak çağırdıktan sonra hide() işlevini bildiriyorsunuz. Bildirimi setTimeout çağrısından önce yapmanız yeterlidir.

Ayrıca, bir kod dizesini setTimeout için ilk argüman olarak ilettiğinizde, eval düzenlenir. değerlendirme kötülüktür. Sadece işlev nesnesini ilet:

function hide() {
    $(this).delay(800).animate({
        right: "-325px"
    }, 1000);
}
time = setTimeout(hide, 3000);
1
katma
Kodunuzu göstermek için orijinal kodumu düzenledim, ancak yine de kod çalışmıyor ve yeni bir hata alıyorum. "" "elem.ownerDocument, undefined (! (defaultView = elem.ownerDocument.defaultView)) {}
katma yazar zealisreal, kaynak

Yeni kodda 2 sorun var

  1. Gizleme işlevinin içinde, $ (this) bağlamı aynı değildir. mouseout işlevinin içinde çağrıldığında.
  2. İkinci olarak, gizleme işlevi mouseout işlevinin içinde anonim işlev olarak tanımlanır

Mouseover olay işleme fonksiyonu dışında bildirilen bir işlev olsaydı daha mantıklı olacağını hissediyorum. Bu şekilde global olarak setTimeOut'tan ve mouseout olay işleyicisinden referans alabilirsiniz. Aşağıdaki kodu deneyin. Bunun konuyu çözmesi gerektiğine inanıyorum ya da en azından bir adım önde ol.

var time;
var $form;

$("#form").mouseenter(function() {
    $form = $(this);
    clearTimeout(time);
    $(this).delay(800).animate({
        right: 0
    }, 2000);
}).mouseleave(function() {
    hide();
    time = setTimeout(hide,1000);
});
function hide() {
    $form.delay(800).animate({
        right: "-325px"
    }, 3000);
}
1
katma
Iyi yorum, kesinlikle .mouseleave() kapsamı dışında hide() koyarak mantıklı
katma yazar zealisreal, kaynak