Je possède ce code dans un fichier js:Pourquoi l'ordre de définition des attributs pour une case à cocher créée dynamiquement dans jquery affecte-t-il sa valeur?
function buildRolePicker() {
var pnl = $("[id$='staffRoles']");
$.each(roles["ContactGroupRoles"], function(iteration, item) {
pnl.append(
$(document.createElement("input")).attr({
id: 'cgr' + item['RoleId'],
name: 'cgroles',
value: item['RoleId'],
title: item['RoleName'],
type: 'checkbox'
})
);
pnl.append(
$(document.createElement('label')).attr({
'for': 'cgr' + item['RoleId']
})
.text(item['RoleName'])
);
});
alert(document.forms[0].cgroles[8].value);
}
je perdais un peu de temps dans d'autres sections de code à essayer de comprendre pourquoi un appel à
alert(document.forms[0].cgroles[8].value);
retournait une valeur de « sur "quand il devrait revenir longtemps. Il s'avère que le problème est l'ordre dans lequel les attributs sont définis. Si je change ceci:
$(document.createElement("input")).attr({
id: 'cgr' + item['RoleId'],
name: 'cgroles',
value: item['RoleId'],
title: item['RoleName'],
type: 'checkbox'
})
à ceci:
$(document.createElement("input")).attr({
type: 'checkbox',
id: 'cgr' + item['RoleId'],
name: 'cgroles',
value: item['RoleId'],
title: item['RoleName']
})
tout fonctionne bien et je reçois ma longue valeur comme prévu lorsque i:
alert(document.forms[0].cgroles[8].value);
Ma question est pourquoi?
données de test:
var roles = {"ContactGroupRoles":[
{"RoleId":1,"RoleName":"Pending"},
{"RoleId":2,"RoleName":"CEO"},
{"RoleId":3,"RoleName":"Financial Controller"},
{"RoleId":4,"RoleName":"General Manager"},
{"RoleId":5,"RoleName":"Production Manager"},
{"RoleId":6,"RoleName":"Sales Manager"},
{"RoleId":7,"RoleName":"Marketing Manager"},
{"RoleId":8,"RoleName":"Sales Agent"},
{"RoleId":9,"RoleName":"Customer Service"},
{"RoleId":10,"RoleName":"Manager"}
]};
Juste une idée, mais jetez un coup d'œil aux lignes 874 et 1384 de jquery-1.4.2 (la version de développement est donc lisible, bien sûr). Il semble que s'il n'y a pas de valeur définie pour une case à cocher, elle reçoit par défaut la valeur "on" - peut-être que cela se produit dans votre cas? Je sais que vous définissez une valeur, mais peut-être que cela n'est pas considéré comme une valeur valide pour une case à cocher ... – Faisal
Où et comment 'roles [" ContactGroupRoles "]' est-il déclaré? S'il vous plaît poster tout le code associé. –
Salut comme mentionné, simplement en changeant l'ordre de déclaration d'attribut résout le problème ainsi ce n'est pas un problème avec la validité de la valeur.roles ["ContactGroupRoles"] est un objet javascript. Je peux alerter (item ['RoleId']) et toujours avoir une valeur. Merci Faisal, au moins maintenant je sais d'où il tirait sa "valeur". Il est clair que vous devez définir le type avant de définir la valeur. Semble un peu évident, mais je pensais juste que jquery "trier" et je ne me souviens pas de lire cela comme une exigence partout. (J'ai en fait tiré la base de ce code d'une autre question SO). http://tiny.cc/stc2m – rism