<form>-Eigenschaft aus Script innerhalb des <form> ändern?
Bachsau
- javascript
Also, folgendes ist Sache:
<form id="editform" name="editform" method="post" action="/w/index.php?title=Seite&action=submit" enctype="multipart/form-data">
<script type="text/javascript">document.forms.editform.onsubmit = function(event)
{
return MySubmitForm();
}
function MySubmitForm()
{ //usw...</script>
Geht auch soweit wunderbar. Blöd is' nur, dass sich die Bezeichnung "editform" ändern kann, weil das Script-Element aus einem Addon-Widget kommt (das ich gerade schreibe), das <form> aber aus verschiedenen Templates der Software.
Jetzt ist die Frage, was ich anstelle von document.forms.editform. einsetzen könnte, um relativ auf das übergeordnete <form> zuzugreifen, egal wie es heißt und welche id es hat.
Jetzt ist die Frage, was ich anstelle von document.forms.editform. einsetzen könnte, um relativ auf das übergeordnete <form> zuzugreifen, egal wie es heißt und welche id es hat.
Das hatte ich gerade in einem anderen Forum:
function prevElement(name) {
var script = document.getElementsByTagName('script');
var me = script[script.length-1];
name = name.toLowerCase();
return (function(obj) {
if(!obj) return null;
var n = obj.nodeName.toLowerCase();
if(n == name) return obj;
if(n == 'body') return null;
if(obj.previousSibling) return arguments.callee(obj.previousSibling, name);
return null;
})(me.previousSibling);
}
var form = prevElement('form');
alert(form);
Struppi.
Hi,
Jetzt ist die Frage, was ich anstelle von document.forms.editform. einsetzen könnte, um relativ auf das übergeordnete <form> zuzugreifen, egal wie es heißt und welche id es hat.
Das hatte ich gerade in einem anderen Forum:
function prevElement(name) {
var script = document.getElementsByTagName('script');
var me = script[script.length-1];
name = name.toLowerCase();
return (function(obj) {
if(!obj) return null;
var n = obj.nodeName.toLowerCase();
if(n == name) return obj;
if(n == 'body') return null;
if(obj.previousSibling) return arguments.callee(obj.previousSibling, name);
return null;
})(me.previousSibling);
}
var form = prevElement('form');
alert(form);
Abgesehen davon, dass ich „auf das übergeordnete <form> zuzugreifen“ hier eher so verstanden habe, dass das Script-Element ein Nachfahre des Formulars sein soll, und deshalb nicht die previousSiblings, sondern parentNodes zu betrachten wären: Ich werde wohl nie verstehen, warum manche Leute für sowas Rekursion bemühen, wenn's doch auch eine einfache while-Schleife tut, und man sich den Stack-Overhead damit sparen kann.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Abgesehen davon, dass ich „auf das übergeordnete <form> zuzugreifen“ hier eher so verstanden habe, dass das Script-Element ein Nachfahre des Formulars sein soll, und deshalb nicht die previousSiblings, sondern parentNodes zu betrachten wären: Ich werde wohl nie verstehen, warum manche Leute für sowas Rekursion bemühen, wenn's doch auch eine einfache while-Schleife tut, und man sich den Stack-Overhead damit sparen kann.
Stimmt. Kann sein, dass ich in letzter Zeit zuviele closures gebaut habe, dass ich geglaubt habe nicht mehr damit auszukommen ;-)
Das kann ich natürlich nicht so stehen lassen:
function parentElement(name) {
var script = document.getElementsByTagName('script');
var me = script[script.length-1];
name = name.toLowerCase();
var node = me.parentNode;
while(node) {
var n = node.nodeName.toLowerCase();
if(n == name) return node;
node = node.parentNode;
}
return null;
}
var form = parentElement('form');
alert(form);
Struppi.