2011-01-03 6 views
0

Ich erstelle ein Windows 7-Gadget und erlaube einem Benutzer, sich über das Gadget anzumelden. Das Gadget meldet sich bei jeder gültigen (wie von der Anwendungsdomäne definierten) Adresse an, die der Benutzer bereitstellt. Jetzt stoße ich auf ein Problem. Ich mache so etwas wie diese:Aufruf in einer JavaScript-Funktion, die von innerHTML aufgerufen wird

function Object(address){ 
    this.address = address 
.... 
this.loginBox = gDocument.createElement("loginBox"); 
this.loginBox.innerHTML = "<FORM name = 'myForm' action='' method='GET'><input type='text' name='usernameBox' id = 'usernameBox' VALUE=''><input type='password' id = 'passwordBox'><button type = 'button' value = 'Ok' id = 'loginButton' onclick='login()'></FORM>"; 

(Anmerkung: Wenn jemand den obigen Code formatiert werden könnte, das wäre schön, aber es ist nicht notwendig, genau zu wissen, was gerade los ist, das Konzept der wissen, was ich versuche zu tun)

Also in Login ich kann nicht this.address um die Adresse zu erhalten, weil die Adresse in jedem Objekt gehalten wird. Die Login-Methode ist technisch nicht Teil des Prototyps. Wenn es so wäre, wüsste ich nicht, wie ich es aus dem HTML nennen soll. (Nun, das ist nicht wahr, ich wüsste, wie ich es nennen soll, aber ich würde nur wissen, wie man es als eine Prototyp-Methode nennt, wo es die Funktionalität ausführen würde, aber keine der lokalen Variablen haben würde).

Jede Hilfe beim Abrufen der Login-Methode, die von myForm aufgerufen wird, um die lokalen Variablen zu kennen, wäre sehr willkommen. Die Variable, die ich bekommen möchte, ist diese.Adresse. Die Login-Funktion ist einfach Funktionsanmeldung.

+0

Mybe müssen Sie mehr Code einfügen ... welche lokale Variable (lokal wo) möchten Sie in der Login-Methode erfassen? – Jaime

+0

Ich habe versucht, es ein wenig klarer zu machen. – user535617

Antwort

0

Ich denke, alles, was Sie tun müssen, ist das Formular in das Dokument zu rendern, suchen Sie den Button mit der ID und hängen Sie das Ereignis mit attachEvent an, damit Sie den Bereich steuern können.

this.loginBox = gDocument.createElement("loginBox"); 
this.loginBox.innerHTML = "<FORM name = 'myForm' action='' method='GET'><input type='text' name='usernameBox' id = 'usernameBox' VALUE=''><input type='password' id = 'passwordBox'><button type = 'button' value = 'Ok' id = 'loginButton'></FORM>" 

// add this.loginBox to the document here 

// Look up the button in the document and add the click handler 
var button = gDocument.getElementById('loginButton'); 
button.attachEvent('onclick', this.login); 

Sie müssen möglicherweise etwas tun, um den Bereich zu binden, kann mich nicht erinnern.

var $this = this; 
button.attachEvent('onclick', function() { 
    $this.login.apply($this, arguments); 
}); 
+0

Ich habe versucht, mit Ihrem Code und ich bekomme einen Laufzeitfehler: "Objekt unterstützt diese Eigenschaft oder Methode nicht". – user535617

+0

Welche Zeile, getElementById oder attachEvent? – Hemlock

+0

attachEvent. Ich habe versucht, beide Lösungen zu verwenden. Ich habe auch versucht, button.onclick = this.login; Das gibt mir keinen Fehler, aber es funktioniert auch nicht, und wenn das gesetzt ist, klickt man auf die Schaltfläche, um es gedrückt zu halten. Es wird erst freigegeben, wenn man irgendwo anders klickt. – user535617

0

Nun, der „schmutzige“ Weg in die Funktion wie diese die Adresse gerade ist vorbei:

this.loginBox.innerHTML = "<FORM .... id = 'loginButton' onclick='login(\"" + this.address + "\");'>Login</button></FORM>"; 

Die elegante Art vorgeschlagen, wie Hemlock tun werden, aber da ich keine Ahnung habe, was gDocument Ich bin mir nicht sicher, ob es die erforderlichen Methoden unterstützt.

+0

Das funktionierte, danke. Ich stimme zu, dass es eine schmutzige Art ist, es zu tun, aber es ist der einzige Weg, wie es zu funktionieren scheint. – user535617

+0

@ user535617 froh, dass es funktioniert .. können Sie erklären, was 'gDocument' ist oder einen Link posten? Vielleicht gibt es einen anderen Weg, also ist es einen Versuch wert. :) –

Verwandte Themen