2010-03-19 7 views
3

cela semble assez simple, je ne sais pas si c'est un bug, ou juste quelque chose que je fais mal.construction jquery case à cocher - impossible de définir la valeur cochée

Ce que je veux faire est de construire une case à cocher dans jquery, puis de retourner la chaîne de l'entrée. J'ai ce code:

var obj = $('<input>'); 
obj.attr('disabled', 'disabled'); 
obj.attr('type', 'checkbox'); 
obj.attr('checked', 'checked'); // this does not work! 

peu importe comment j'essaie de rendre ce obj, l'attribut « checked » ne s'émis.

J'ai essayé:

$('<div>').append(obj).remove().html(); 

et il retourne:

<input type="checkbox" disabled="disabled" /> 

J'ai essayé de définir un attribut id, il ne fait aucune différence. J'ai aussi essayé mais il ne fonctionne pas:

obj.attr('checked', true); 

Toutes les suggestions sur la façon d'obtenir l'étiquette d'entrée avec le rendu (via jquery) attribut checked à « checked »?

Je réalise que je peux le faire avec la concaténation de chaînes, mais maintenant je veux vraiment savoir pourquoi cela ne fonctionne pas comme il se doit.

EDIT

Vous pouvez essayer par vous-même dans Firebug. Créer l'obj soit mon chemin ou cletus 'façon, puis essayez de le rendre à une chaîne. Vous constaterez que l'attribut 'checked' n'est jamais rendu.

+0

Est-ce que c'est dans un

+0

obj.attr ('checked', true); Ça devrait marcher ... Peut-être que c'est votre sélecteur qui cause des problèmes. Pouvez-vous tester votre sélecteur dans Firebug et voir s'il retourne quelque chose? –

+0

Cela ne fonctionne pas. Rien n'est ajouté au HTML. Très étrange. Avez-vous soumis un rapport de bogue à jq? – dclowd9901

Répondre

2

Vous avez raison, il y a un peu de bizarrerie avec l'attribut "checked". Il semble que cela ne prend effet qu'après avoir été rendu par le navigateur. (Et pas seulement dans un fragment.)

Par exemple, en utilisant votre code,

var obj = $('<input />'); 
obj.attr('disabled', 'disabled'); 
obj.attr('type', 'checkbox'); 
obj.attr('checked', 'checked'); 
var wrapper = $('<div />').append(obj); 
alert(wrapper.html());  // notice, no checked attr in this string... 
$('body').prepend(obj);  // but now notice, it IS checked when it's drawn! 

Je sais que ce n'est pas vraiment une « réponse » en soi, mais je voulais vous faire savoir que vous n'allez pas les noix. Je serais curieux aussi de savoir pourquoi c'est le cas.

Bonne chance!

0

Avez-vous essayé juste

obj.attr('checked'); 

ne cherche pas à être facétieuse. Je voulais juste savoir si ça faisait quelque chose pour lui.

Je suppose que vous avez raison à ce sujet. Je n'y ai jamais vraiment pensé parce que jQuery a une solution de contournement intégrée dans le sélecteur :checked, donc ce n'est jamais vraiment un problème.

+0

oui qui renvoie 'true', c'est-à-dire que la valeur cochée est définie, mais elle n'est pas rendue dans une chaîne .. – benpage

+0

Commentaire original ajouté. – dclowd9901

3

Cela fonctionne pour moi:

$("<input>").attr({ 
    type: "checkbox", 
    disabled: true, 
    checked: true 
}).appendTo("body"); 

FF 3.6 Tested, Chrome 4 et IE 8 (compat).

+0

oui mais je ne veux pas l'ajouter au corps. Je veux retourner une chaîne '' ... essayez votre code dans firebug sans .appendTo ("body"), et essayez d'obtenir le code HTML rendu. – benpage

+0

@benpage juste curieux: pourquoi voulez-vous la chaîne? – cletus

+0

@benpage vous avez raison. Je viens de jouer avec ça. *Très étrange. – cletus

0

La seule façon dont je suis au courant de cela vous permettra de retourner un objet HTML entier comme une chaîne serait d'utiliser l'astuce outerHTML:

jQuery.fn.outerHTML = function() { 
    return $('<div>').append(this.eq(0).clone()).html(); 
}; 

Ensuite, il suffit

$("<input>").attr({ 
    type: "checkbox", 
    disabled: true, 
    checked: true 
}).outerHTML(); 

Will vous donner la chaîne complète.

+0

Oui, c'est bon, je suis d'accord, et je ne peux pas répondre au 'pourquoi', mais cette méthode retournera une entrée avec checked = "checked" – Ray

+0

Peut-être que c'est un problème avec Firebug. Sinon, je ne vois pas comment jQ pourrait analyser l'information. – dclowd9901

Questions connexes