2010-11-12 4 views
3

j'ai cet exemple de base:

<!doctype HTML> 
<html> 
<head> 
    <script src="jquery-1.4.2.min.js" type="text/javascript"></script> 
    <script> 
     $(document).ready(function(){ 
      $("#showAction").click(function(){ 
       alert($("#myForm").attr("action")); 
      }); 
     }); 
    </script> 
</head> 
<body> 
<form id="myForm"> 
    <input type="text" name="action" value="myAction" /> 
</form> 
<input type="button" value="click me" id="showAction" /> 
</body> 
</html> 

Lorsque vous cliquez sur « moi cliquez sur » vous peut voir l'étiquette

$("#myForm").attr("action"); 

Ne retourne pas réellement un attribut de l'élément. Il renvoie l'enfant du formulaire avec le nom "action".

Est-ce que ce comportement est attendu? Est-ce un bug dans jQuery?

+0

Il n'y a pas l'attribut d'action sur votre formulaire dans l'exemple ci-dessus. En incluez-vous un? –

+1

@Grillz: Lol, c'est le point de la question. Si une action n'est pas affectée dans l'élément

, le script regarde apparemment ses enfants. – KeatsKelleher

+1

Est-ce que 'action' n'est pas requis sur' '? Pas 100% sûr de toutes les normes modernes etc; juste pour être sûr. – Kos

Répondre

9

Il est un « bug » introduit par Netscape il y a longtemps (un mouvement boneheaded, OMI), où form.action est une propriété parce qu'un élément avec qui name est un enfant du <form>. Donc non, ce n'est pas vraiment un bug jQuery, mais un bug JavaScript, en fonction de votre point de vue ... jQuery n'a aucun contrôle supplémentaire pour ces cas. Par mesure de sécurité, ne nommez pas vos éléments "action" ou "submit", car il peut également jouer avec form.submit().

+1

Un joli rappel que IE n'est pas le seul coupable pour les premiers jours kludgy de l'Internet. +1 –

+0

+1 c'est la réponse * réelle *. –

+0

+1 Je suppose que c'est parce que, effectivement, '$ ('form'). Attr ('action')' est un wrapper pour '$ ('form') [0] .action'? – lonesomeday

Questions connexes