Dies ist der HTML-Code:

<!doctype html>
<html>
<head>
    <title>title</title>
    <meta charset="utf-8">
    <script src="vendor/jquery.js"></script>
    <script>
        $(document).ready($(".voice").click(function() {
            alert("succeed");
        }));
    </script>
</head>
<body>
    <div class="container">
        <div class="voice-div">
            <input type="text" class = "voice" />
        </div>
    </div>
    </div><!-- close class="wrapper" -->

    <!-- the support button on the top right -->
</body>
</html>

Als ich auf input geklickt habe, wurde alert nicht angezeigt. Aber wenn ich setze

<script>
    $(document).ready($(".voice").click(function() {
        alert("succeed");
    }));
</script>

Kurz vor </body> hat es funktioniert. Warum? Wie soll ich den Code ändern, wenn ich das Skript in den Teil <head>...</head> einfügen möchte?

2
Searene 11 Aug. 2015 im 18:33

6 Antworten

Beste Antwort

Ich glaube nicht, dass Sie eine solche Ereignisdeklaration sofort in einen $(document).ready... -Block einbetten können. Versuchen Sie, Ihren Code wie folgt zu ändern:

$(document).ready(function () {
    $(".voice").click(function() {
        alert("succeed");
    });
});

Oder Kurzform als:

$(function () {
    $(".voice").click(function() {
        alert("succeed");
    });
});
15
War10ck 11 Aug. 2015 im 15:35

Wenn Sie dies außerhalb der Bereitschaftsfunktion aufrufen möchten, können Sie so etwas versuchen

$(document).on("click",".voice",function()

{

alert ('called');

}) ;

In diesem Fall sollten Sie es nach einer Ajax-Anforderung weiterhin verwenden können, wenn Sie nach dem Erfolg von Ajax neue Elemente mit diesem Klassennamen anwenden.

0
Grzegorz P. 15 Sept. 2015 im 04:56

Der Grund ist, dass Sie es nicht richtig codieren. Ändern Sie den Code in:

<script>
$(document).ready(function() {
    $(".voice").click(function(){
       alert("succeed");
    });
});
</script>

In Ihrem Code haben Sie Folgendes eingegeben: $(".voice").click als Argument bereit, Aus diesem Grund führt Javascript es sofort nicht im Dokument aus. Es funktioniert bereits nach dem Body-Tag, aber nicht davor.

3
War10ck 11 Aug. 2015 im 15:37

Sie müssen ready eine -Funktion übergeben.

Sie übergeben den Rückgabewert des Aufrufs an .click(). Folglich erfolgt der Versuch, den Klick-Handler zu binden, sofort (und schlägt fehl, da sich das Element noch nicht im DOM befindet), und die Funktion ready ignoriert den Wert, den Sie an ihn übergeben (da dies keine Funktion ist).

$(document).ready(
    function () {
        $(".voice").click(
            function() {
                alert("succeed");
            }
        );
    }
);

Aber als ich direkt vor </body> gesetzt habe, hat es funktioniert.

Dies liegt daran, dass die Elemente an diesem Punkt vorhanden sind. Die Bindung des fertigen Ereignisses schlägt weiterhin fehl, aber der Ausdruck, den Sie mit dem Rückgabewert erfolgreich übergeben haben, hat die Klickereignisse zuerst gebunden.

11
Quentin 11 Aug. 2015 im 15:40
<script>
    $(document).ready(function() {
        $(".voice").click(function() {
            alert("succeed");
        });
    });
</script>
-2
pebbo 11 Aug. 2015 im 15:35

Das Skript soll folgendermaßen aussehen:

$(document).ready(function() {
    $(".voice").click(function() {
        alert("succeed");
    });
});

Es geht darum, Rückrufe hinzuzufügen, 'Objekte' zu funktionieren. Was Sie getan haben, war, die Funktionen (Klicken und dann Warnen) sofort beim Laden des Skripts aufzurufen und die Ergebnisse (falls vorhanden) als Argumente zu übergeben.

4
buer 11 Aug. 2015 im 15:38