nimble: Out of memory Fehler bei Funktionsangabe

Hi zusammen

Ich wollte ein Uploadskript machen, welches immer ein neues Feld hinzufügt:

<input type="file" onChange="addInputFile()">

funktioniert soweit!
Nun soll das neue Feld dieselbe Funktion erhalten:

  
function addInputFile() {  
inputField = document.createElement("input");  
...  
inputField.onClick = addInputFile();  
...  
}  

nur leider mmeldet der IE dann den Fehler: Out of Memory at line x
Grund ist die funktionsangabe (getestet!)

An was könnte das liegen?
THX im voraus!

  1. Naja, Du rufst halt die Funktion immer und immer wieder auf! Ich vermute mal, Du wolltest folgendes machen:

      
    ...  
    inputField.onchange = "addInputFile()";  
    ...  
    
    

    Kleiner aber feiner Unterschied :-)

    Hi zusammen

    Ich wollte ein Uploadskript machen, welches immer ein neues Feld hinzufügt:

    <input type="file" onChange="addInputFile()">

    funktioniert soweit!
    Nun soll das neue Feld dieselbe Funktion erhalten:

    function addInputFile() {
    inputField = document.createElement("input");
    ...
    inputField.onClick = addInputFile();
    ...
    }

    
    >   
    > nur leider mmeldet der IE dann den Fehler: Out of Memory at line x  
    > Grund ist die funktionsangabe (getestet!)  
    >   
    > An was könnte das liegen?  
    > THX im voraus!
    
    1. Naja das hab ich mir irgendwie gedacht das das ne endlosschleiffe ist...

      Nur leider funktioniert der Aufruf nicht, wenn ich das mit "" mache :-(

      1. Yerf!

        Nur leider funktioniert der Aufruf nicht, wenn ich das mit "" mache :-(

        Ist auch falsch. Onchange erwartet eine Funktion als Übergabe, keinen String.

        inputField.onchange = addInputFile;

        Gruß,

        Harlequin

        1. :-( immer noch nichts...

          Ich post nochmal den ganzen teil, vill. hab ich ja sonst noch fehler drinn:

            
          <td id="BildInput"><input type="file" name="bild[]" size="8" onChange="addFileInput()"><br>  
          
          

          Da kann ja noch nix schief gehen...

            
          function addFileInput()  
             {  
              table = document.getElementById("BildInput");  
            
              inputField = document.createElement('input');  
              inputField.setAttribute('name', 'bild[]');  
              inputField.setAttribute('type', 'file');  
              inputField.setAttribute('size', '8');  
              inputField.onClick = addFileInput;  
            
              table.appendChild(document.createElement('br'));  
              table.appendChild(inputField);  
             }  
          
          

          irgend wo klemmts noch..
          ich hab auch schon die Variante
          inputField.onchange = function { addFileInput(); }; gesehen - auch das futzt ned :-(

          1. Hab's mal kurz probiert, bei mir (Firefox1.5) funktioniert's so:

              
                inputField.setAttribute('onChange', 'addFileInput()');  
            
            

            :-( immer noch nichts...

            Ich post nochmal den ganzen teil, vill. hab ich ja sonst noch fehler drinn:

            <td id="BildInput"><input type="file" name="bild[]" size="8" onChange="addFileInput()"><br>

            
            > Da kann ja noch nix schief gehen...  
            >   
            > ~~~javascript
              
            
            > function addFileInput()  
            >    {  
            >     table = document.getElementById("BildInput");  
            >   
            >     inputField = document.createElement('input');  
            >     inputField.setAttribute('name', 'bild[]');  
            >     inputField.setAttribute('type', 'file');  
            >     inputField.setAttribute('size', '8');  
            >     inputField.onClick = addFileInput;  
            >   
            >     table.appendChild(document.createElement('br'));  
            >     table.appendChild(inputField);  
            >    }  
            > 
            
            

            irgend wo klemmts noch..
            ich hab auch schon die Variante
            inputField.onchange = function { addFileInput(); }; gesehen - auch das futzt ned :-(

            1. Hab's mal kurz probiert, bei mir (Firefox1.5) funktioniert's so:

              inputField.setAttribute('onChange', 'addFileInput()');

                
              Tja im Firefox geht das bei mir auch, nur ist das Dumme an der Sache, dass ich das für den IE programmieren muss und noch etlicke Funktionsaufrufe die so angehängt werden müssen noch vor mir habe :'-(  
                
              langsam hab ich wirklich alle Möglichkeiten - kann es sein, dass der IE das ganz verweigert? Wie bitte soll dan Ajax funktionieren?
              
              1. So es ist geschafft :-)

                Die Lösung:
                Auch wenn in HTML die Schreibweise «onChange» mit grossem C üblich ist, akzeptiert das der Internet Explorer im JavaScript nicht da muss es «onchange» heissen!

                Ich dank euch für eure Hilfe!
                gruss nimble
                ------------------------------
                lieber ein Pinguin der läuft
                als ein Fenster das hängt
                ------------------------------

                1. Auch wenn in HTML die Schreibweise «onChange» mit grossem C üblich ist, akzeptiert das der Internet Explorer im JavaScript nicht da muss es «onchange» heissen!

                  Das hatte ich dir vor vier Stunden schon gesagt https://forum.selfhtml.org/?t=134527&m=872845

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
            2. Hallo,

              Hab's mal kurz probiert, bei mir (Firefox1.5) funktioniert's so:

              inputField.setAttribute('onChange', 'addFileInput()');

                
              Siehe auch <https://forum.selfhtml.org/?t=134355&m=872661>  
                
              Mathias
              
              -- 
              [Visitenkarte](http://community.de.selfhtml.org/visitenkarten/view.php?key=17) · [SELFHTML Weblog](http://aktuell.de.selfhtml.org/weblog/)
              
              1. Ich dank dir für den Link, den hatt ich noch nicht gefunden und es wird mal gut erklärt...
                Nur bei mir funktionierts einfach nicht:
                inputField.onChange = addFileInput;

                Binn ich irgendwie dämlich oder was?

                Hab's mal kurz probiert, bei mir (Firefox1.5) funktioniert's so:

                inputField.setAttribute('onChange', 'addFileInput()');

                
                >   
                > Siehe auch <https://forum.selfhtml.org/?t=134355&m=872661>  
                >   
                > Mathias  
                  
                \------------------------------  
                lieber ein Pinguin der läuft  
                als ein Fenster das hängt  
                \------------------------------
                
          2. Es funktioniert übrigens auch mit Harlequins Variante (da hatte er recht...). Du hast immer noch das "onclick" in Deinem Code. Du brauchst "onchange"!

            :-( immer noch nichts...

            Ich post nochmal den ganzen teil, vill. hab ich ja sonst noch fehler drinn:

            <td id="BildInput"><input type="file" name="bild[]" size="8" onChange="addFileInput()"><br>

            
            > Da kann ja noch nix schief gehen...  
            >   
            > ~~~javascript
              
            
            > function addFileInput()  
            >    {  
            >     table = document.getElementById("BildInput");  
            >   
            >     inputField = document.createElement('input');  
            >     inputField.setAttribute('name', 'bild[]');  
            >     inputField.setAttribute('type', 'file');  
            >     inputField.setAttribute('size', '8');  
            >     inputField.onClick = addFileInput;  
            >   
            >     table.appendChild(document.createElement('br'));  
            >     table.appendChild(inputField);  
            >    }  
            > 
            
            

            irgend wo klemmts noch..
            ich hab auch schon die Variante
            inputField.onchange = function { addFileInput(); }; gesehen - auch das futzt ned :-(

      2. Hmmm, also ich gehe jetzt mal davon aus, dass der restliche Code in Ordnung ist, Du das Element irgendwo mit appendChild oder so reinpappst und dann auch angezeigt bekommst, nur der Event-Handler funktioniert nicht? Hast Du das in der Funktion auch mit "onchange" statt mit "onclick", wie in Deinem Post, gemacht?

        Naja das hab ich mir irgendwie gedacht das das ne endlosschleiffe ist...

        Nur leider funktioniert der Aufruf nicht, wenn ich das mit "" mache :-(

  2. function addInputFile() {
    inputField = document.createElement("input");
    ...
    inputField.onClick = addInputFile();

    Zwei Fehler:
    1. derEventhandler heißt onclick (JS ist casesensitive)
    2. Der Rückgabewert der Funktion addInputFile() ist vermutlich undefiniert

    Ein Eventhandler erwartet eine Referenz auf eine Funktion, entweder imn der Form:

      
    inputField.onclick = addInputFile;  
    
    

    (ohne Klammer ist das eine Referenz, du kannst dir das anschauen: alert(addInputFile ); )

    oder

      
    inputField.onclick = function()  
    {  
    addInputFile();  
    }  
    
    

    Das ist eine anonyme Funktion (weil sie keinen Namen hat), aber trotzdem brauchst du die Klammer für die Parameter (den Fehler hättest du in deinen Versuchen eigentlich in der FF Konsole sehen müssen)

    Struppi.

    --
    Javascript ist toll (Perl auch!)