17 votes

La valeur de jQuery est indéfinie ?

J'ai ce code :

<input type="hidden" id="editorTitle" name="title" value="home">
<textarea name="text" id="editorText"></textarea>

Mais quand j'écris $('#editorTitle').val() y $('#editorText').html() , $('#editorTitle').val() est "indéfini" et $('#editorText').html() est vide ?

Qu'est-ce qui ne va pas ?


Edit :

Voici mon code complet :

function openEditor() {
    $("#editor").show().animate({ width: 965, height: 380 }, 1500);
    $("#editor textarea").show();
}

function closeEditor() {
    $("#editor").animate({ width: 985, height: 1 }, 1500, function () {
        $("#editor").hide();
        $("#editor textarea").hide();
    });
}

function setedit() {
    $.ajax({
        type: "POST",
        url: "engine.php",
        data: "title=" + $('#editorTitle').attr('value') + "&text=" + $('#editorText').html(),
        beforeSend: function () {
            $('#mainField').html('<img src="data/images/loader.gif" alt="Loading...">');
        },
        success: function (msg) {
            alert(msg);
            closeEditor();
            search();
        }
    });
}
function search() {
    $('#title').val($('#search').val());

    $.get('engine.php?search=' + $('#search').val(), function (data) {
        $('#mainField').html(data);
    });

    $.get('engine.php?raw=true&search=' + $('#search').val(), function (data2) {
        $('#editorText').html(data2);
    });

    $.get('engine.php?title=true&search=' + $('#search').val(), function (data2) {
        $('#h1').html(data2); // Row 152
        $('#editorTitle').html(data2);
    });
}

$(document).ready(function () {
    $("#ready").html('Document ready at ' + event.timeStamp);
});

Mais qu'est-ce qui ne va pas ? !?

28voto

Aron Rotteveel Points 27894

Vous avez probablement inclus votre JavaScript avant le HTML : exemple .

Vous devez soit exécuter votre JavaScript lors du chargement de la fenêtre (ou mieux, lorsque le DOM est entièrement chargé), soit inclure votre JavaScript après votre HTML : exemple .

13voto

Jonathan Points 2327

Vous devez appeler les événements après que le document soit prêt comme ceci :

$(document).ready(function () {
  // Your code
});

En effet, vous essayez de manipuler des éléments avant qu'ils ne soient rendus par le navigateur.

Donc, dans le cas que vous avez posté, cela devrait ressembler à quelque chose comme ceci

$(document).ready(function () {
  var editorTitle = $('#editorTitle').val();
  var editorText = $('#editorText').html();
});

J'espère que cela vous aidera.

Conseils : sauvegardez toujours votre objet jQuery dans une variable pour une utilisation ultérieure et seul le code qui doit vraiment être exécuté après le chargement du document doit être placé dans la fonction ready().

6voto

fWd82 Points 596

C'est stupide mais pour référence future. J'ai mis tout mon code :

$(document).ready(function () {
    //your jQuery function
});

Mais ça ne marchait toujours pas et ça revenait undefined valeur. Je vérifie mon DOM HTML

<input id="username" placeholder="Username"></input>

et j'ai réalisé que je l'avais mal référencé dans jQuery :

var user_name = $('#user_name').val();

Je le fais :

var user_name = $('#username').val();

a résolu mon problème.

Il est donc toujours préférable de vérifier votre code précédent.

4voto

Marcel Colomb Points 425

Peut-être avez-vous oublié de le charger dans la fonction "document prêt" ?

$(document).ready(function () {

    //your jQuery function
});

2voto

Drew Points 582

J'ai moi-même rencontré ce problème hier dans le cadre d'un projet sur lequel je travaillais. Dans mon cas particulier, ce n'était pas exactement le nom de l'entrée, mais comment l'ID a été nommé.

<input id="user_info[1][last_name]" ..... />
var last_name = $("#user_info[1][last_name]").val() // returned undefined

Le retrait des supports a résolu le problème :

<input id="user_info1_last_name" ..... />
var last_name = $("#user_info1_last_name").val() // returned "MyLastNameValue"
Quoi qu'il en soit, c'est probablement une évidence pour certaines personnes, mais au cas où cela aiderait quelqu'un d'autre... voilà !

-) - Drew

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X