2009-09-04 10 views
3

Compte tenu de l'form ci-dessous:forme de lecture propriété d'action dans IE6, si la forme a un champ « action »

<form id="myForm" action="index.php"> 
    <input type="hidden" name="action" value="list" /> 
    <input type="submit" /> 
</form> 

Comment puis-je obtenir la valeur de la propriété action de la forme (index.php) en utilisant IE6?

Astuce: J'ai essayé

document.getElementById('myForm').action 

et

document.getElementById('myForm').getAttribute('action') 

Mais aucun d'entre eux travaillent. Ils renvoient tous les deux le champ input (document.getElementById('myForm').action.value == 'list').

Répondre

4

Il y a une façon simple, en utilisant la collection attributes du nœud:

document.getElementById("myForm").attributes["action"].value 

page de test pour essayer (démontre aussi le brisement de getAttribute comme mentionné la réponse de David Dorward):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="en"> 
<head> 
<title>Form Action Access</title> 
<script type="text/javascript"> 
function dotAccess() 
{ 
    alert(document.getElementById("myForm").action.value); 
} 
function getAttributeAccess() 
{ 
    alert(document.getElementById("myForm").getAttribute("action")); 
} 
function attributesAccess() 
{ 
    alert(document.getElementById("myForm").attributes["action"].value); 
} 
</script> 
</head> 
<body> 
<form id="myForm" action="foo"> 
    <input type="hidden" name="action" value="bar"> 
    <input type="button" onclick="dotAccess()" value="form.action"> 
    <input type="button" onclick="getAttributeAccess()" value='form.getAttribute("action")'> 
    <input type="button" onclick="attributesAccess()" value='form.attributes["action"]'> 
</form> 
</body> 
</html> 
+0

Voilà comment une réponse devrait ressembler! "Voici vos options" et "Voici ce que j'ai trouvé" Merci. – Tom

3

Il n'y a pas un moyen simple.

La présence du champ d'action, aplatit la propriété d'action de la forme et getAttribute est cassé dans IE 8. <

La seule façon que je peux penser est de se salir avec des expressions régulières. Je suggère fortement de changer le formulaire pour utiliser un nom différent du champ que 'action' si cela est possible à la place.

var form = document.forms.myForm; 
var action = form.getAttribute('action'); 
if (action === form.elements.action) { 
     // getAttribute broken; 
     var string = form.outerHTML; 
     return string.match(/action=(.*?)[> ]/)[1]; 
} else { 
     return action; 
} 

Cette expression régulière peut ne pas être suffisamment robuste. Alors testez-le si vous l'utilisez.

3

David a raison. Voici une façon moins méchante que la regex si:

var action= document.forms.myForm.cloneNode(false).action; 

(Parce que le clone est peu profonde, il n'y a pas 'input name = "action"' à l'intérieur du nouvel élément de formulaire pour le confondre.)

+0

C'est intelligent. J'aime ça. – Quentin

0

I Nous venons de trouver une autre solution: utiliser ou cloner la méthode readAttribute disponible dans prototypejs.

Questions connexes