J'ai passé 2 heures ce matin à essayer de comprendre pourquoi ma fonction jQuery fonctionnait dans une partie de la page mais pas dans une autre. Je l'ai finalement réduit à un rembourrage vertical sur un conteneur.pauses de rembourrage jQuery selector?
Si j'avais dans mon CSS:
div.collapsiblePanel {
padding: 0px 1%;
}
puis, via jQuery, je peux trouver l'élément parent (.CollapsiblePanel) et pourrait traverser dans cette div et manipuler les éléments enfants. Cependant, si je change juste une chose dans ma feuille de style à ceci:
div.collapsiblePanel {
padding: 5px 1%;
}
Alors jQuery peut trouver le parent (.CollapsiblePanel) mais est incapable de traverser les enfants.
Fou, non? Des théories sur ce qui se passe? Je me cognais la tête sur celui-ci en pensant qu'il devait être quelque chose avec mon jQuery mais c'était finalement un problème de CSS.
par demande, quelques extraits de balisage/css/code:
La fonction jQuery spécifique qui n'a pas été (apparemment) de travail:
function finishUp(ajaxContainer,originalContainer,loadingAlert) {
$(ajaxContainer).find("input.btnSave").css("border","3px solid red");
var saveButtonn = $(ajaxContainer).find("input.btnSave");
console.log(ajaxContainer);
console.log(originalContainer);
console.log(loadingAlert);
console.log(saveButton);
$(ajaxContainer).find("input.btnSave").css("border","3px solid red").click(function(){
alert("you clicked the save button");
savePanel($(this));
});
};
Qu'est-ce que ça fait est, après des fonctions précédente charge contenu via AJAX, puis afficher le conteneur, cette fonction entre et attache un événement de clic au bouton.
Comme vous pouvez le voir, j'ai un tas de code de journalisation supplémentaire là-dedans. Lorsque mon remplissage vertical CSS est défini sur '0', Firebug enregistre le nom d'objet approprié de chacun d'entre eux. Lorsque je modifie mon remplissage vertical CSS à toute autre chose, le dernier objet (saveButton) revient vide/vide dans Firebug.
Le code HTML:
<div class="ajaxEditPanel editablePanel collapsiblePanel" style="display: block;">
<form>
<fieldset class="sideLabels dividers">
<legend>Edit Realtionship Information</legend>
...the form...
<div class="formItem formButtons"
<input value="save" class="button btnSave" type="button">
<input value="cancel" class="button btnCancel" type="button">
</div>
</fieldset>
</form>
</div>
Notez que cette DIV est créé par des fonctions précédentes jQuery et chargé avec le contenu. Au début, je pensais que c'était un problème de synchronisation, où j'essayais d'attacher un événement à un objet qui n'avait pas encore été chargé dans le DOM. Cependant, cela n'explique pas pourquoi les mêmes fonctions exactes ont fonctionné ailleurs sur la page. La seule variable que je pourrais changer et qui ferait que ce travail fonctionne ou non finit par être un peu de remplissage de CSS. Si, dans les parties de la page où fonctionne la fonction actuelle, j'ajoute aussi du padding vertical au conteneur, ils cassent aussi jQuery en sélectionnant les éléments enfants.
si vous mettez en place une démo montrant ces deux cas, je vous garantis que quelqu'un vous dira ce que vous faites mal ou juste. – mkoryak
Cela semble improbable ... comment traverses-tu les enfants? –
Il peut être utile de publier le fragment HTML incriminé. –