2009-12-08 9 views
0
soumettre

je les valeurs suivantes d'une forme étant accessible par jQuery en utilisant .VAL():jQuery .val() pas mise à jour sur

var un0 = $("input.e0").val(); 
var un1 = $("input.e1").val(); 
var un2 = $("input.e2").val(); 
var un3 = $("textarea.e3").val(); 

Les valeurs d'origine dans ceux des éléments ont été ajoutés précédemment par un script différent qui boucle les valeurs à partir des données XML AJAX.

Le problème est que lorsque je modifier les valeurs sous la forme (à savoir les écraser) et soumettre le formulaire à jour mon db, les valeurs d'origine , plutôt que les valeurs mises à jour sont envoyés. C'est comme si les nouvelles valeurs étaient ignorées par .val(). Si je teste ce qui est posté à partir du formulaire avec une alerte (un0); la valeur nouvellement éditée n'est pas récupérée et je peux voir que l'original est utilisé.

Remarque. Ce n'est pas le cas pour la zone de texte (un3) qui fonctionne correctement et qui se met à jour avec une nouvelle valeur lors de l'édition.

Des idées pour lesquelles jQuery n'utilise pas le nouveau fichier .val() des entrées?

Modifié plus source:

Les valeurs sont définies dans un bloc de code précédent après un appel XML à partir du db. Ceci est exécuté quand un article est cliqué.

// Construct the output info (for both read and write) 
    for (var i = 0; i < field_count; i++){ 
     data = eval("r" + i); 
     $(".r"+i).replaceWith("<span class=\"r" + i + "\">" + data + "</span>"); 
     $(".e"+i).attr("value", data); 
} 

Ensuite, la version en lecture seule est affichée. Il y avait un lien qui permet de désactiver la version en lecture seule et le formulaire avec les mêmes valeurs.

Puis soumettre jQuery appelle la fonction Ecraser:

$(".overwrite").click(function() { 

// Other conditionals, then ... 

if (category=="3"){ 
    // phone 
    var un0 = $("input.e0").attr('value'); 
    var un1 = $("input.e1").attr('value'); 
    var un2 = $("input.e2").attr('value'); 
    var un3 = $("textarea.e3").val(); 

    // Encode each using myKey 
    e0 = Passpack.encode("AES",un0,myKey); 
    e1 = Passpack.encode("AES",un1,myKey); 
    e2 = Passpack.encode("AES",un2,myKey); 
    e3 = Passpack.encode("AES",un3,myKey); 

    queryString = 'user_id=' + user + '&cat_name=' + cat_name + '&id=' + item_no + '&v1='+ e0 + '&v2=' + e1 + '&v3=' + e2 + '&v4=' + e3; 

} 

// Other conditionals, then … 

// Call edit.php to make update on db 
    $.ajax({ 
    type: "POST", 
    url: "app/edit.php", 
    data: queryString, 
    success: function() {  
     $("#edit_" + cat_name).hide(); 
     $("#delete_success").hide(); 
     $("#right_read").show(); 
     $("#write_success").show(); 
     $("#read_" + cat_name).show(); 
     get_list(0,category); 
     read_db(category,item_no); 
    } 
    }); 
    time_out(); 
    return false; 
}); 

Les valeurs sous la forme, après l'édition ne sont pas mis à jour et la soumission utilise les valeurs initiales fixées par le code ci-dessus.

+1

à quel point le code que vous avez collé en cours d'exécution? –

+0

Etes-vous sûr de mettre à jour les variables? Ce sera bien si vous avez posté la source complète que vous utilisez. – kgiannakakis

+0

Les variables, e0, e1, etc sont d'abord mis acheter un bloc de code différent. (Les valeurs en lecture seule sont également définies, en utilisant r0, r1, etc. Ensuite, un script bascule la version en lecture seule des données vers le formulaire qui a ces valeurs dans les champs. (jQuery en cache un et montre l'autre.) Ensuite, le formulaire peut être mis à jour en le surclassant. Il existe un lien de mise à jour qui exécute une fonction pour mettre à jour les valeurs et soumettre un script PHP pour mettre à jour le DB (également AJAX). Le code ci-dessus fait partie de cette fonction, qui est appelée lorsque le lien de mise à jour est cliqué. – Mark

Répondre

1

Vous pouvez faire qqch comme ça pour obtenir les valeurs après avoir cliqué sur le bouton:

$('submit').click(function() { 
    var un0 = $("input.e0").val(); 
    var un1 = $("input.e1").val(); 
    var un2 = $("input.e2").val(); 
    var un3 = $("textarea.e3").val(); 
}); 
+0

Cela se fait après que le bouton submit (dans mon cas 'overwrite') soit cliqué. – Mark

1

Ouvrir addon Firebug dans Firefox et inspectez la demande AJAX qui est envoyé. Est-ce qu'il transmet les mêmes variables aux deux demandes? Placez un alert('something unique') après chaque endroit où vous affectez quelque chose à la variable queryString, puis alert(queryString) juste avant la publication AJAX.

Vous ne respectez pas votre condition ou quelque chose d'autre l'écrase. $.ajax() est pas cassé =)

+0

Merci pour votre commentaire. Firebug est le bon chemin. (Je ne suis pas sûr comment un site avec des appels asynchrones pourrait être construit sans elle). J'ai passé par un processus de débogage relativement complet avant de poser ma question ici. Tous les appels $ .AJAX, et $ .post() que j'ai fonctionnent bien pour autant que je sache. Tous les appels renvoient le bon code XML et tous les messages ne renvoient aucune erreur SQL et affichent les données correctes (j'ai déjà débogué ceux-ci!) En fait, tout le côté serveur semble être bon ... – Mark

+0

... J'ai une alerte (un0 + "\ n" + e0); ce qui confirme que les données ajoutées à queryString fonctionnent. C'est juste que les données écrasées ne sont pas réinitialisées. Seules les données pré-remplies sont utilisées et .val() ou .attr ('value') ne le mettra pas à jour comme je l'ai. Je suis en fait passer plus haut entre les catégories, et la catégorie par défaut fonctionne correctement (en utilisant ces valeurs et .val()). Donc, ma conclusion actuelle est que j'ai une mauvaise duplication causant des problèmes quelque part. – Mark

1

hey, je peut-être en retard à la fête, mais je travaillais sur cette même question, et voici le code js qui a fonctionné pour moi:

$('.matcher').each(function(){ 
    var idt = $(this).attr('rel'); 
    $(this).click(function(){ 
    var baseval=$('#base_'+idt).attr('value'); 
    $.post("t_softmatch_p.php", 
    { base: baseval, 
     iding: idt 
    }); 
    //alert(baseval + idt); 
    $(this).hide(); 
    })//end click   
    });//end each 

et est ici le formulaire HTML que j'ai, en dumping dans le contenu d'un DB dans une boucle,

echo "<form name=\"f_$iding\" id=\"f_$iding\" action=\"\" method=\"post\"> 
"; 
echo "".($m+1).") <input type=\"hidden\" name=\"iding\" id=\"iding\" value=\"$iding\"> 
"; 
echo "<input type=\"text\" name=\"ing_$iding\" id=\"ing_$iding\" value=\"$ingword\"> ==> 
"; 
echo "<input type=\"text\" name=\"base_$iding\" id=\"base_$iding\" value=\"$baseword\"> 
"; 

echo "<input type=\"button\" name=\"matcher\" id=\"matcher\" class=\"matcher\" title=\"matcher\" value=\"Make match\" rel=\"$iding\"> 
"; 
echo "</form><br> 
";