javascript изменяем свойство action формы - объекта form
Потребовалось перед отправкой формы изменить “адресат” - action у формы. По идее ничего сложного -
document.form1.action = 'new_address.html';
или аналогичные
document.getElementById('form1').action = 'new_address.html';
document.forms[0].action = 'new_address.html';
однако, такого рода конструкция работает везде, кроме internet explorer…
Объясняется это тем, что в IE нет различий между свойствами и атрибутами.
Поиск подсказал, что для изменения action у формы можно использовать setAttribute
document.form1.setAttribute("action","'new_address.html")
Но и в этом случае, internet explorer не порадовал.
Однако, различия, все-таки обнаружены - оба варианта для internet explorer:
- для случая “form1.action = …” браузер выдал ошибку “object doesn’t support …”;
- для случая “form1.setAttribute();” ie отправляет по старому адресу;
После очередной порции поисков по интернету, размышления над JavaScript мануалами изобразил что-то вроде:
o=document.getElementById('form1');
o.setAttribute("action","new_address.html"); // в IE "пустышка", но ошибку не выдает
// рабочая конструкция для IE - изменяет action для формы путем перебора всех атрибутов
for (var i=0; i < o.attributes.length; i++) {
if (o.attributes[i].nodeName == 'action') {
o.attributes[i].nodeValue = 'new_address.html';
break;
}
}
Понимаю, что решение далеко от идеального, однако, работает
Да здравствует IE!..
ps. В очередной раз встает вопрос “А для кого стандарты?”
Метки: ie, js, кроссбраузерность
ie вообще отличается “умом и саабразительнастью”, не только в плане форм и action-ов javascript-ов и тд.