Bachsau: <form>-Eigenschaft aus Script innerhalb des <form> ändern?

Also, folgendes ist Sache:

<form id="editform" name="editform" method="post" action="/w/index.php?title=Seite&amp;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.

  1. 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.

    1. 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?
      
      1. 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.