2011-03-23 2 views
0

Je possède ce formulaire:Pourquoi la fonction jQuery renvoie null?

<form action="javascript:;" class="iceFrm" enctype="application/x-www-form-urlencoded" id="frmMainMenu" method="post" onsubmit="return false;"> 
..... 
</form> 

Je ne comprends pas pourquoi ce script:

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#frmMainMenu").$("#menuPopupAP").$("#menuItem0").$("#out").css('padding','0 0 0 29px'); 
}); 
</script> 

dit:

$("#frmMainMenu") est nul

dans Firebug.

MISE À JOUR: Ceci est l'élément html (du formulaire ci-dessus) Je veux changer le rembourrage sur:

<span id="frmMainMenu:menuPopupAP:menuItem0:out" class="iceOutTxt iceMnuItmLabel graMenuPopupMenuItemLabel">My Applications</span> 

Mise à jour 2:

J'ai oublié de mentionner que cette span est dans un menu, donc, fondamentalement, il est caché normalement et affiché uniquement lorsque vous passez la souris sur un div ... Est-ce que jQuery le trouve même s'il n'est pas affiché?

Savez-vous pourquoi?

+0

Pouvez-vous poster l'intégralité du formulaire? – Belinda

+0

Le résultat de '$ (...)' n'a pas une autre propriété '$ (...)'. – pimvdb

+1

'$ (" # frmMainMenu "). $ (" # MenuPopupAP "). $ (" # MenuItem0 "). $ (" # Out ")' n'est pas correct. Qu'est-ce que vous essayez de faire exactement? –

Répondre

0

$('#frmMainMenu:menuPopupAP:menuItem0:out').css('padding','0 0 0 29px'); 

$('span[id="frmMainMenu:menuPopupAP:menuItem0:out"]').css('padding','0 0 0 29px'); 

Vous devez utiliser la syntaxe [id="value"], parce que dans un sélecteur jQuery le : peut être utilisé comme un sélecteur, donc il ne se rend pas compte que le Les ID peuvent les contenir.

+0

Eh bien, très étrange, il me donne encore nul ... s'il vous plaît noter que l'id ci-dessus est tiré de Firebogu donc fondamentalement c'est l'id composé de tous les composants parent ... –

+0

@Cristian: Que voulez-vous dire par "composé id"? –

+0

Je veux dire qu'il prend les identifiants de tous les parents et montré les résultats avec: entre les identifiants ... –

1

Mise à jour après votre mise à jour de la question:

$('#frmMainMenu\3AmenuPopupAP\3AmenuItem0\3Aout').css('padding','0 0 0 29px'); 

Vous ne pouvez pas utiliser le : dans votre sélection mais vous pouvez utiliser l'équivalent hexadécimal - \3A

Il y a peu d'autres solutions de contournement sur this SO thread.


Est-que vous essayez de rechercher les enfants de frmMainMenu? Essayez ceci à la place:

$(document).ready(function() { 
      $("#frmMainMenu").find("#menuPopupAP") 
          .find("#menuItem0") 
          .find("#out") 
          .css('padding','0 0 0 29px'); 
}); 
+0

'$ ('# frmMainMenu: menuPopupAP: menuItem0: out')' ne fonctionne pas réellement, car jQuery utilise le ': 'en tant que sélecteur. –

+0

@Rocket - oui, je l'ai réalisé. Merci. Avoir mis à jour ma réponse. –

0

Ce n'est pas ça - c'est l'un des enfants qui est nul. Vous devez changer votre script pour quelque chose comme ça

<script type="text/javascript"> 
$(document).ready(function() { 
      $("#frmMainMenu #menuPopupAP #menuItem0 #out").css('padding','0 0 0 29px'); 
     }); 
     </script> 
0

Certes, vous ne voulez pas dire utiliser # chaque fois (sinon vous pouvez simplement utiliser #out, mais il semble que ce devrait être quelque chose comme

$ ("# frmMainMenu .menuPopupAP .menuItem0 .out"). css (...

2

Je ne sais pas exactement pourquoi vous obtenez l'erreur null, mais si votre intention est d'appliquer ce style à ces quatre éléments spécifiques la syntaxe devrait être:

$("#frmMainMenu, #menuPopupAP, #menuItem0, #out").css('padding','0 0 0 29px'); 

Si (et je ne peux pas dire car nous avons donné un échantillon de balisage insuffisant) ces quatre éléments sont des nœuds successifs dans une hiérarchie (c.-à-d. #out est un enfant de #menuItem est un enfant de #menuPopupAp est un enfant de #frmMainMnenu) alors supprimez les virgules entre eux.

EDIT colons dans un ID? Cela causera des problèmes avec les sélecteurs jQuery. Essayez d'utiliser un trait de soulignement à la place?

+0

IDs * can * contient des deux-points, c'est valide, mais jQuery ne peut pas sélectionner des ID avec deux-points comme ça, parce que ':' est lu comme un sélecteur. Vous devez faire '[id =" value "]' à la place. –

0

Pouvez-vous poster ce que vous avez besoin d'accomplir? de votre sélecteur, je pense que vous prenez une approche sélective pour interagir avec votre DOM.

Questions connexes