web-dev-qa-db-fra.com

jQuery val est indéfini?

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() et $('#editorText').html(), $('#editorTitle').val() est 'non défini' et $('#editorText').html() est vide?

Qu'est-ce qui ne va pas?


Modifier:

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?!?!

12
Thew

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

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

21
Aron Rotteveel

Vous devriez appeler les événements une fois le document prêt , comme ceci:

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

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

Donc, dans le cas où vous avez posté cela devrait ressembler à ceci

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

J'espère que ça aide.

Astuces: enregistrez toujours votre objet jQuery dans une variable pour une utilisation ultérieure. Seul le code devant réellement s'exécuter après le chargement du document doit être inséré dans la fonction ready ().

8
Jonathan

se pourrait-il que vous ayez oublié de le charger dans la fonction de préparation de document?

$(document).ready(function () {

    //your jQuery function
});
3
Marcel Colomb

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

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

Mais cela ne fonctionnait toujours pas et renvoyait la valeur undefined. Je vérifie mon HTML DOM 

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

et j’ai réalisé que jQuery ne me référait pas correctement: 

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

Le rendant:

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

résolu mon problème.

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

2
fWd82

essayez: $('#editorTitle').attr('value')?

0
null

Je me suis récemment retrouvé moi-même hier sur un projet sur lequel je travaillais. Je suis mon cas spécifique, ce n'est pas exactement ce que l'entrée a été nommé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

Supprimer les crochets 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, cela ne devrait pas poser de problème à certaines personnes, mais au cas où cela pourrait aider quelqu'un d'autre ... voilà!

:-)- A dessiné

0
Drew

vous pouvez oublier d'envelopper votre objet avec $() 

  var tableChild = children[i];
  tableChild.val("my Value");// this is wrong 

et le correct est 

$(tableChild).val("my Value");// this is correct
0
Basheer AL-MOMANI