2009-09-04 3 views
3

Учитывая form ниже:Чтения свойство формы действия в IE6, если форма имеет поле под названием «действие»

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

Как я могу получить значение для action свойства формы (index.php) с использованием IE6?

Подсказка: Я попытался

document.getElementById('myForm').action 

и

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

Но ни один из них работают. Они оба возвращают поле input (document.getElementById('myForm').action.value == 'list').

ответ

4

Существует простой способ, с помощью attributes собираемого узла:

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

тестовой страницы, чтобы попробовать его (также демонстрирует разбитость GetAttribute как упоминался ответ Дэвида 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

Теперь вот как должен выглядеть ответ! «Вот ваши варианты» и «вот что я нашел» Спасибо. – Tom

3

Существует не простой способ.

Присутствие поля действия, задавливает свойство действия формы и GetAttribute сломано в IE < 8.

Единственный способ, которым я могу думать о том, чтобы испачкать с регулярными выражениями. Я бы очень сильно предложил изменить форму, чтобы использовать другое имя для поля, чем «действие», если это вообще возможно.

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; 
} 

Это регулярное выражение может быть недостаточно надежным. Поэтому испытайте это, если вы его используете.

3

Давид справа. Вот менее неприятный путь, чем регулярное выражение, хотя:

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

(Поскольку клон неглубокий, нет «имени входного =„действия“» внутри нового элемента формы, чтобы запутать его.)

+0

Это умная. Мне это нравится. – Quentin

0

I Я просто нашел другой способ: использование или клонирование метода readAttribute, доступного в prototypejs.