Disons que j'ai:Défi Javascript. Comment puis-je y parvenir avec des tableaux?
var directions = [ "name", "start_address", "end_address", "order_date" ];
Je suis en train de trouver une nappe, moyen rapide de transformer ce tableau en ceci:
data: { "directions[name]" : directions_name.val(), "directions[start_address]" : directions_start_address.val(), "directions[end_address]" : directions_end_address.val(), "directions[order_date]" : directions_order_date.val() }
Notez que le motif. Le nom du tableau "directions" est le préfixe des valeurs. Je suis intéressé comment les gens peuvent faire ceci ou au moins suggérer un moyen pour moi d'essayer.
Des conseils seraient appréciés.
Merci!
EDIT **
Merci pour les suggestions à ce jour. Cependant, j'ai oublié de mentionner que le tableau "directions" doit être dynamique.
Par exemple, je pourrais utiliser:
places = ["name", "location"]
devrait retourner
data: { "places[name]" : places_name.val(), "places[location]" : places_location.val() }
alpha = ["blue", "orange"]
devrait retourner
data: { "alpha[blue]" : alpha_blue.val(), "alpha[orange]" : alpha_orange.val() }
Donc, fondamentalement, je pouvais passer un tableau en fonction et il renvoie cet objet de données.
var directions = ["name", "start_address", .... ]; var data = someCoolFunction(directions);
Espérons que cela a du sens.
** EDIT * ** * ** * ** * ****
Je tiens à remercier tout le monde pour leur aide. J'ai fini par suivre une route différente. Après y avoir réfléchi, j'ai décidé de mettre des méta-informations dans le formulaire HTML lui-même. Et, je m'en tiens à une convention de nommage. Alors qu'un formulaire HTML a l'information dont il a besoin (SANS être gonflé) pour dire à jQuery où poster les informations. Voilà ce que je fini par faire (pour les personnes intéressées):
// addBox // generic new object box. function addBox(name, options) { var self = this; var title = "Add " + name.charAt(0).toUpperCase() + name.slice(1); var url = name.match(/s$/) ? name.toLowerCase() : name.toLowerCase() + "s"; allFields.val(""); tips.text(""); $("#dialog-form-" + name).dialog($.extend(default_dialog_options, { title: title, buttons: [ { // Add Button text: title, click: function(){ var bValid = true; allFields.removeClass("ui-state-error"); var data = {}; $("#dialog-form-" + name + " input[type=text]").each(function() { // each is fine for small loops :-) var stripped_name = this["name"].replace(name + "_", ""); data[name + "[" + stripped_name + "]"] = $("#dialog-form-" + name + " #" + name + "_" + stripped_name).val(); }); // verify required fields are set $("#dialog-form-" + name + " input[type=text].required").each(function() { bValid = bValid && checkLength($(this), $(this).attr("name").replace("_", " "), 3, 64); }); // find sliders $("#dialog-form-" + name + " .slider").each(function() { data[name + "[" + $(this).attr("data-name") + "]"] = $(this).slider("option", "value"); }); data["trip_id"] = trip_id; if(options != null) { $.extend(data, options); } // add optional key/values if(bValid) { $(".ui-button").attr("disabled", true); $.ajax({ url : "/" + url, type : "POST", data : data }); } } }, { text: "Cancel", click: function(){$(this).dialog("close");} } ] })); }
Je ne suis pas sûr de savoir ce que vous essayez de faire .. – xj9
Pourquoi ne pas utiliser la direction au lieu de données? comme ceci var direction = {nom: nom.val(), ...} – user347594
On dirait qu'écrire une fonction qui peut accéder au nom d'une variable passée n'est pas trivial: http://stackoverflow.com/questions/1009911/javascript -get-argument-value-et-name-of-passed-variable –