onclick wird automatisch ausgeführt – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self onclick wird automatisch ausgeführt Sun, 02 Oct 11 14:59:21 Z https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527360#m1527360 https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527360#m1527360 <p>Hallo<br> ich will per Greasemonkey (Firefox) ein Button erstellen, der eine Funktion beim Anklicken ausführt. Doch leider führt er die Funktion bei mir immer aus (also schon bevor ich geklickt habe).</p> <pre><code class="block language-javascript"> <span class="token keyword">var</span> links2 <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"button"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> links2<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">'onClick'</span><span class="token punctuation">,</span><span class="token function">send</span><span class="token punctuation">(</span>lagerFreiraum<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//bei onclick passiert dasselbe </span> <span class="token keyword">var</span> buttonText <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createTextNode</span><span class="token punctuation">(</span>lagerFreiraum<span class="token punctuation">)</span><span class="token punctuation">;</span> links2<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>buttonText<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> td <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string">"tr"</span><span class="token punctuation">)</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string">"td"</span><span class="token punctuation">)</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">var</span> td_a <span class="token operator">=</span> td<span class="token punctuation">.</span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string">"br"</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span> td<span class="token punctuation">.</span><span class="token function">insertBefore</span><span class="token punctuation">(</span>links2<span class="token punctuation">,</span> td_a<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">send</span><span class="token punctuation">(</span><span class="token parameter">lF</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token function">alert</span><span class="token punctuation">(</span>lF<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Würde mich über Hilfe freuen<br> lg<br> eugen</p> onclick wird automatisch ausgeführt Sun, 02 Oct 11 15:38:29 Z https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527363#m1527363 https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527363#m1527363 <p>Hallo,</p> <blockquote> <p>links2.setAttribute('onClick',send(lagerFreiraum));  //bei onclick passiert dasselbe</p> </blockquote> <p><a href="http://molily.de/js/event-handling-grundlagen.html#fehler-handler-aufrufen" rel="nofollow noopener noreferrer">Häufiger Fehler: Handler-Funktion direkt aufrufen</a></p> <p>Du solltest besser <a href="http://molily.de/js/event-handling-fortgeschritten.html#dom-events" rel="nofollow noopener noreferrer">addEventListener</a> verwenden. In jedem Fall musst du ein Funktionsobjekt übergeben. Das ist beim Aufrufen von send natürlich nicht der Fall. send(lagerFreiraum) gibt wahrscheinlich undefined zurück, aber kein Funktionsobjekt.</p> <p>Du kannst eine <a href="http://molily.de/js/organisation-verfuegbarkeit.html#closures" rel="nofollow noopener noreferrer">Closure</a> erzeugen, indem du eine Funktion notierst, die dir eine Funktion zurückgibt. Dabei wird der übergebene Parameter eingeschlossen und steht der zurückgegebenen Funktion zur Verfügung:</p> <pre><code class="block language-javascript">links2<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token function">makeSend</span><span class="token punctuation">(</span>lagerFreiraum<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">makeSend</span> <span class="token punctuation">(</span><span class="token parameter">1F</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token function">send</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">alert</span><span class="token punctuation">(</span>1F<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Dasselbe lässt sich auch einfach schreiben. Du kannst <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind" rel="nofollow noopener noreferrer">bind</a> benutzen, um eine Funktion zu erzeugen, die den Parameter übergeben bekommt:</p> <p><code class="language-javascript">links2<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token function">send</span><span class="token punctuation">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> lagerFreiraum<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></p> <p>In der funktionalen Programmierung nennt man dieses Verfahren Currying oder Schönfinkeln. Siehe auch <a href="http://www.peterkroener.de/ecmascript-5-die-nachste-version-von-javascript-teil-6-function-prototype-bind/" rel="nofollow noopener noreferrer">http://www.peterkroener.de/ecmascript-5-die-nachste-version-von-javascript-teil-6-function-prototype-bind/</a>.</p> <p>Mathias</p> onclick wird automatisch ausgeführt Sun, 02 Oct 11 15:38:55 Z https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527362#m1527362 https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527362#m1527362 <p>Hi,</p> <blockquote> <p>ich will per Greasemonkey (Firefox) ein Button erstellen, der eine Funktion beim Anklicken ausführt. Doch leider führt er die Funktion bei mir immer aus (also schon bevor ich geklickt habe).</p> </blockquote> <p>„Er“ ist nicht Schuld, du selber rufst die Funktion auf:</p> <blockquote> <pre><code class="block language-javascript"></code></pre> </blockquote> <blockquote> <p>var links2 = document.createElement("button");<br> links2.setAttribute('onClick',send(lagerFreiraum));  //bei onclick passiert dasselbe</p> </blockquote> <pre><code class="block"> - genau hier. Funktionsname-gefolgt-von-rundern-Klammern ist nun mal die Syntax zum \*Aufrufen\* einer Funktion. Übergebe nur die Referenz auf die Funktion - also nur den Funktionsnamen, ohne runde Klammern dahinter. Wenn du noch einen Parameter dabei übergeben musst, dann kannst du dich einer anonymen Funktion bedienen, Stichwort Closure. MfG ChrisB -- RGB is totally confusing - I mean, at least #C0FFEE should be brown, right? </code></pre> onclick wird automatisch ausgeführt Sun, 02 Oct 11 15:43:12 Z https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527361#m1527361 https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527361#m1527361 <p>[latex]Mae  govannen![/latex]</p> <blockquote> <pre><code class="block language-javascript"></code></pre> </blockquote> <blockquote> <p>links2.setAttribute('onClick',send(lagerFreiraum));</p> </blockquote> <pre><code class="block"> Hier wird die Funktion durch die Notation `send(lagerFreiraum)`{:.language-javascript}direkt ausgeführt. Du solltest entweder die Funktion als Zeichenkette schreiben `links2.setAttribute('onClick','send(' + lagerFreiraum + ')');`{:.language-javascript} oder besser auf `setAttribute()`{:.language-javascript} verzichten, sondern die Funktionsreferenz direkt zuweisen `links2.onclick = function () {send(lagerFreiraum);};`{:.language-javascript} Stur lächeln und winken, Männer! Kai -- Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken in Richtung "Mess up the Web".([suit](https://forum.selfhtml.org/?t=197497&m=1324775)) [SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet) </code></pre> onclick wird automatisch ausgeführt Sun, 02 Oct 11 17:00:48 Z https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527364#m1527364 https://forum.selfhtml.org/self/2011/oct/2/onclick-wird-automatisch-ausgefuehrt/1527364#m1527364 <p>Ich danke dir!</p>