2016-03-25 4 views
0

Ich habe versucht, an einer Funktion zu arbeiten, um meine Seite an die Oberseite der Seite zu scrollen, wenn ich auf einen Anker klicke. Mein jQuery-Skript wie folgt aussieht:jQuery .animation() Funktion läuft Zeile zweimal und funktioniert nicht

$("a#drop-user-box").click(function() 
          { 
    console.log("foor"); //Would return foo value once 
    $("html, body").animate({scrollTop: 0}, "slow", function() 
    { 
    //console.log("foor"); Would return foo value twice? 

    // Code doesn't work when in here 
    // $(".drop-down").toggleClass('hidden'); 
    // $(".drop-down input[type='e-mail']:first-of-type").focus(); 
    }); 
    // Code does work when in here 
    // $(".drop-down").toggleClass('hidden'); 
    // $(".drop-down input[type='e-mail']:first-of-type").focus(); 
}); 

Was ist der Unterschied mit der Ausführung des Stück Code außerhalb der animate() Funktion und in ihm? Und warum funktioniert der Code nicht, wenn sich die beiden Zeilen für das Dropdown-Feld innerhalb der .animate()-Funktion befinden? Bitte erläutern Sie mir, wie das funktioniert.

Vielen Dank im Voraus,

Edit:

Wie würde ich diese Arbeit ?:

$("a#drop-user-box").click(function(e) { 
 
\t e.preventDefault(); 
 
    $("html, body").animate({ 
 
     scrollTop: 0 
 
    }, "slow", function() { 
 
     $('.drop-down').show(); 
 
    }); 
 
});
.user-box .drop-down 
 
{ 
 
    padding: 15px 25.5px; 
 
\t display: block; 
 
    border: 1px solid #aaa; 
 
\t background-color: #fff; 
 
} 
 

 
.user-box .drop-down form 
 
{ 
 
\t width: 250px; 
 
} 
 

 
.space 
 
{ 
 
    border: 1px solid #000; 
 
    height: 900px; 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="drop-down hidden"> 
 
    <form action="" method="post"> 
 
    <div class="form-group"> 
 
     <input type="e-mail" class="form-control text-box single-line" name="E-mail" placeholder="E-mail adres"> 
 
    </div> 
 
    <div class="form-group"> 
 
     <input type="password" class="form-control text-box single-line" name="Wachtwoord" placeholder="Wachtwoord"> 
 
    </div> 
 
    <div class="checkbox"> 
 
     <label> 
 
     <input type="checkbox"> Bewaar login informatie 
 
     </label> 
 
    </div> 
 
    <input type="submit" class="btn btn-default" value="inloggen"> 
 
    </form> 
 
    <a href="#">Wachtwoord vergeten?</a> 
 
</div> 
 

 
<div class="space"> 
 

 
</div> 
 

 
<a href="#" id="drop-user-box">Foo</a>

+0

Wenn Ihr Anker einen 'href' hat, würde er Sie nicht woanders umleiten? – adeneo

+0

Die Rückruffunktion wird aufgerufen, nachdem die Animation beendet ist. Wenn Sie innerhalb von ihm schreiben, wird es angewendet, sobald scrolltop auf 0 geht. Wenn Sie sich außerhalb davon bewerben, wird es angewendet, bevor die Animation abgeschlossen ist. –

+0

@adeneo Es verweist auf ein Hashtag-Zeichen, also auf die Seite selbst. Wie auch immer, wie könnte ich es dann wie den ersten Fall funktionieren lassen? – Barrosy

Antwort

1

Der Grund, dass es nicht funktioniert hat, weil die Die Funktion .show() entfernt den Klassennamen "hidden" nicht. Die .show() & .hide() Funktionen arbeiten mit den Eigenschaften style = "display: block" und style = "display: none" &. So werden Sie diese Zeile HTML ändern müssen:

<div class="drop-down hidden"> 

Um dies:

<div class="drop-down" style="display:none"> 

Dann wird es funktionieren. Sehen Sie diese jsfiddle für die Demo.

+0

Ist es nicht möglich, nur Klassen/IDs zu verwenden, anstatt die Eigenschaft 'style' zu ​​verwenden? – Barrosy

+0

Sie können die ausgeblendete Klasse auch mit .addClass ("hidden") und .removeClass ("hidden") verwenden. Ersetzen Sie einfach die .show() & .hide() Funktionen durch diese 2 Klassen ändernden Funktionen. – Clomp

+0

Kannst du es bitte in deiner Geige als Beispiel zeigen? Ich habe es versucht, aber es scheint nicht zu funktionieren. – Barrosy

Verwandte Themen