2010-10-11 20 views
1

J'ai une application qui génère un élément avec un attribut 'action'. J'ai besoin de changer la valeur de l'attribut d'action, mais ce n'est pas possible de le faire. Cependant, il est possible d'ajouter un autre attribut « action » avant généré un thusly:Un attribut d'action de formulaire HTML peut-il être répété?

Cela semble fonctionner pour IE. J'aimerais savoir si ce comportement est défini dans les normes w3c et si je peux compter sur les navigateurs qui choisissent le premier attribut d'action. J'ai cherché un peu les documents standards, mais je n'ai pas pu déterminer la règle pour les attributs répétitifs.

Merci.

Répondre

3

La spécification indique qu'il ne peut y avoir qu'un attribut action dans un formulaire.

Cela est logique, car l'attribut action spécifie la page à laquelle les données du formulaire seront affichées et l'afficher sur deux pages différentes n'a pas de sens (comment voir les résultats de plus d'une page?).

Si vous regardez le fragment DTD définissant l'élément FORM de the spec:

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form --> 
<!ATTLIST FORM 
    %attrs;        -- %coreattrs, %i18n, %events -- 
    action  %URI;   #REQUIRED -- server-side form handler -- 
    method  (GET|POST)  GET  -- HTTP method used to submit the form-- 
    enctype  %ContentType; "application/x-www-form-urlencoded" 
    accept  %ContentTypes; #IMPLIED -- list of MIME types for file upload -- 
    name  CDATA   #IMPLIED -- name of form for scripting -- 
    onsubmit %Script;  #IMPLIED -- the form was submitted -- 
    onreset  %Script;  #IMPLIED -- the form was reset -- 
    accept-charset %Charsets; #IMPLIED -- list of supported charsets -- 
    > 

Vous verrez que l'attribut d'action est un. requis, b. n'a pas de spécificateur multiple, ce qui signifie qu'il ne devrait exister qu'une seule fois.

Ce n'est probablement que par hasard que cela fonctionne dans IE. Le comportement n'est pas défini et un autre navigateur peut s'étouffer sur cette entrée ou décider de choisir un attribut d'action aléatoire.

0

+1 pour la réponse de Oded: D

BTW, si vous devez modifier le action original, vous pourriez peut-être essayer d'utiliser javascript:

$("#your_form").attr("action", "something_else"); // in jQuery