2009-07-11 18 views
0

Ich bin dabei, ein JavaScript-Objekt zu schreiben, das eine Methode enthält, die das HTML eines Standardformulars zurückgibt. In diesem Objekt habe ich auch eine Methode validate(); Ich möchte, dass das generierte Formular validate() verwendet;Funktionen als String in Javascript zurückgeben

So ist der typische HTML-Code einer Form mit Validierung würde wahrscheinlich so aussehen:

<form id="a" onSubmit="return validate();"> 

Das Problem ist, dass ich die Objektinstanz verweisen zu können, so es müßte mehr sein wie onSubmit="my_object.validate();">

Ich habe so etwas wie return '<form id="a" onSubmit="return ' + this.validate + '();">'; versucht, aber ich bekomme wirklich seltsames Verhalten.

Wenn ich die Prüf-Funktion willkürlich return true machen wird das Formular abgeschickt, falsch nicht. Wenn ich alle anderen Berechnungen im Verfahren bekomme ich diesen Fehler:

> Error: syntax error Source Code: 
>  return id == 

Hat jemand etwas erlebt?

Antwort

-2

Verwendung eval() eine Zeichenfolge als Javascript

[EDIT} Sounds auszuführen dann wie Sie das Formular und dann in einreichen Anruf this.validate() zum Prototyp benötigen. Erhalten Sie einen Verweis auf das Formularobjekt, wenn Sie es mithilfe von JavaScript erstellen und definieren Sie dann Ihre Methode für die Überprüfung und weisen Sie diese der validate -Eigenschaft zu.

+0

Es muss einen besseren Weg geben, als auf "eval()" zurückzugreifen. –

+0

zweifellos, aber wenn Sie einen String-Wert haben, wie sonst können Sie es in etwas zur Ausführung bringen? –

+0

@Dave Anderson: Sie versuchen zu vermeiden, mit einem String-Wert zu enden, der ausgeführt werden muss ...;) –

5

vielmehr den Event-Handler in dem HTML-Attribut als die Ausgabe, können Sie die Ausgabe der HTML-Code, erhalten einen Verweis auf das Formular-Objekt, fügen Sie dann einen Event-Handler programmatisch wie folgt aus:

<html> 
    <head> 
    <script type="text/javascript"> 
     var my_object = { 
      outputForm: function(container) { 
       container.innerHTML = 
        '<form id="a"><input type="submit" value="Validate" /></form>'; 
       this.createdForm = document.getElementById('a'); 
       this.createdForm.onsubmit = this.validate; 
      }, 
      validate: function() { 
       // use this.createdForm to get at the controls. 
       alert("Who dares awake my slumber?"); 
      } 
     }; 

     function createTheForm() { 
      my_object.outputForm(document.getElementById('container')); 
     } 
    </script> 
    </head> 
    <body onload="createTheForm()"> 
    <div id="container"></div> 
    </body> 
</html> 
0

sorry für dieses Posting als Antwort, nach der Registrierung würde ich nicht meinen ursprünglichen Beitrag als nicht registrierter Benutzer bearbeiten lassen?

Ich dachte über eval aber ich bin nicht sicher, wie man es sogar in dieser Situation benutzt? Ich habe es so versucht

und einige andere Variationen, aber ich bekomme den gleichen Fehler.

würde ich gerne von Hand vermeiden, um das Ereignis hinzufügen Handhabung, wie ich es ziemlich selbst sein möchte, enthalten. Ich dachte über eine reguläre Funktion der Einrichtung, die außerhalb des Objekts sitzt und dann etwas zu tun, wie

' onSubmit="return my_function(' + this + ');">'; 

dann in my_function dies tun:

my_function(given){ return given.validate(); } 

dies wie eine schreckliche Hack scheint und ich bin nicht einmal sicher, ob es funktioniert.

0

Warum sind Sie nicht einfach auf das Element anwenden, nachdem Sie es auf der Seite und mit einem Verschluss hinzufügen Umfang zu halten?

var myId = "bar" + index; 
foo.innerHTML="<form id='" + myId + "'>...</form>"; 
var that = this; 
document.getElementById(myId).onsubmit = function(){ that.validate(this); } 

Das Hinzufügen von Ereignishandlern zum Markup ist immer eine schlechte Idee.

Verwandte Themen