Pourquoi JS / JQuery ne lit-il pas les valeurs de la zone de texte?

J’ai cherché partout la raison pour laquelle ce code ne fonctionne pas et je suis perplexe.

J’ai une page ASPX avec le code C # derrière. Le balisage HTML comporte une boîte de dialog JQuery qui fonctionne correctement. Lorsque le bouton d’envoi est cliqué, la boîte de dialog se ferme et les données sont transmises à une méthode Web exposée et sont écrites dans la firebase database. Toutes les valeurs sont enregistrées pour les contrôles ddl et chkbox, mais la valeur de chaîne de la zone de texte est vide. La firebase database est définie sur NOT NULL pour le champ que la zone de texte est en train de renseigner et les données sont en cours d’enregistrement. Je sais donc que des données sont en cours de transmission, mais il ne s’agit pas de la valeur entrée dans la zone de texte.

L’ID de la zone de texte est txtCategoryName et le mode ID du client est défini sur statique. J’ai essayé d’obtenir les valeurs en utilisant les éléments suivants:

var CategoryName = $('#txtCategoryName').val(); var CategoryName = $('#txtCategoryName').text(); var CategoryName = $(document.getElementById('txtCategoryName')).text(); var CategoryName = $(document.getElementById('txtCategoryName')).val(); var CategoryName = document.getElementById('txtCategoryName').value; 

Tous ces éléments retournent le même champ vide. Je les ai essayés un à la fois. J’utilise actuellement ce code JS:

 $(document).ready(function () { var CategoryDialog = $(".EditCategories"); var BtnNew = $("#btnNew"); var CatDDL = document.getElementById("ddlCategoryParent3"); var CatChk = $("#chkCatActive").val(); var CategoryID = 0; var CategoryName = $("#txtCategoryName").val(); var ParentID = CatDDL.options[CatDDL.selectedIndex].value; if (CatChk) { CatChk = 1; } else { CatChk = 0; } var CatDialog = $(CategoryDialog.dialog({ maxHeight: 1000, closeOnEscape: true, scrollable: false, width: 650, title: 'Category Editor', autoOpen: false, buttons: [ { width: 170, text: "Save", icons: { primary: "ui-icon-disk" }, click: function () { $(this).dialog("close"); window.alert(PageMethods.saveCat(CategoryName, ParentID, CategoryID, CatChk)); } }, { width: 170, text: "Delete", icons: { primary: "ui-icon-circle-minus" }, click: function () { $(this).dialog("close"); } }, { width: 170, text: "Cancel", icons: { primary: "ui-icon-circle-close" }, click: function () { $(this).dialog("close"); } } ] }) ); BtnNew.click(function () { $(CatDialog).dialog('open'); $(CatDialog).parent().appendTo($("form:first")); }); }); 

La balise de code pour la page aspx (categories.aspx)

 
Category Name
<!---->
Parent Category
Active

La méthode C # Code behind pour la page ASPX:

 [System.Web.Services.WebMethod()] [System.Web.Script.Services.ScriptMethod()] public static ssortingng saveCat(ssortingng _Name_, int _parent_id_, int ID, int _Status_) { Category eCT = new Category(); eCT.CategoryName = _Name_; eCT.ParentID = _parent_id_; eCT.ID = ID; eCT.Status = _Status_; eCT.Save(); return eCT.resultMessage; } 

Et la méthode de sauvegarde:

 ///  /// If the ID = 0 the data is written as a new category. /// If the ID is greater than 0 the data is updated. ///  /// The objects result value will hold the result of the attempt to update data as type Boolean. The objects resultMessage value will contain the ssortingng result of the attempt to add data. public void Save() { result = dl.CategoryExists(this); if (result) { resultMessage = "The parent category already contains a category named " + CategoryName.Trim(); } else { if (ID > 0) { if (!result) { resultMessage = "There was an unexpected error updating " + CategoryName.Trim() + ". No changes were saved."; } } else { result = dl.InsertCategory(this); if (!result) { resultMessage = "There was an unexpected error creating the Category."; } } } if (result) { resultMessage = "New Category Successfully Created"; } } 

Toute aide est grandement appréciée merci.

Vous récupérez les valeurs de votre boîte de dialog au moment du démarrage de la page AVANT qu’elles aient été modifiées.

Cela ressemble à ceci:

 var CategoryName = $("#txtCategoryName").val(); 

est exécuté au moment du démarrage de la page avant que la page ait été modifiée. Cela récupérera la valeur par défaut du champ de saisie et ne reflétera jamais les modifications effectuées sur la page. La ligne de code ci-dessus ne crée pas de connexion “en direct” avec le champ de saisie de la page. Il obtient simplement la valeur au moment où la ligne de code est exécutée et à partir de ce moment-là, aucune modification n’est apscope aux modifications apscopes au champ.

Je pense que vous ne voulez extraire la valeur que plus tard, lorsque vous devez réellement valoriser quelque chose. En général, vous ne souhaitez pas mettre en cache une valeur telle que celle-ci, car la valeur en cache n’est plus synchronisée avec ce qui se trouve dans le champ réel de la page. Allez le chercher au moment même où vous en avez besoin pour quelque chose et il n’aura jamais une valeur périmée.

Si l’emplacement où vous utilisez cette valeur se trouve dans le gestionnaire de clics de la boîte de dialog, récupérez-le afin d’obtenir la dernière valeur:

  click: function () { $(this).dialog("close"); var CatChk = $("#chkCatActive").val() ? 1 : 0; var CategoryName = $("#txtCategoryName").val(); var CatDDL = document.getElementById("ddlCategoryParent3"); var ParentID = CatDDL.options[CatDDL.selectedIndex].value; window.alert(PageMethods.saveCat(categoryName, ParentID, CategoryID, CatChk)); } 

Le problème ici est que vous essayez d’obtenir la valeur correcte dès le chargement de la page, avant que le champ de saisie ne soit rempli. Placez ce code dans la fonction de clic du bouton:

 var CategoryName = document.getElementById('txtCategoryName').value; 

et cela devrait fonctionner pour vous. Si non, faites le nous savoir.

Votre code devrait ressembler à quelque chose comme ça:

  click: function () { // note: CategoryID not used yet. var CategoryName = $("#txtCategoryName").val(); var CatChk = $("#chkCatActive").val(); var CatDDL = document.getElementById("ddlCategoryParent3") var ParentID = CatDDL.options[CatDDL.selectedIndex].value; if (CatChk) { CatChk = 1; } else { CatChk = 0; } $(this).dialog("close"); window.alert(PageMethods.saveCat(CategoryName, ParentID, CategoryID, CatChk)); }