{"componentChunkName":"component---src-templates-tag-template-js","path":"/tag/errata","webpackCompilationHash":"a3ac22c47fe06e2afd02","result":{"data":{"site":{"siteMetadata":{"title":"Philip Ackermann","subtitle":"CTO of Cedalo AG @cedalo_com previously @Fraunhofer_FIT 📚 Java/JavaScript/Node.js book author @rheinwerkverlag 🇩🇪 Blogger @heisedc ⚛️ #NodeJS #React #javascript"}},"allMarkdownRemark":{"edges":[{"node":{"html":"<p>In Listing 4.3 hat sich ein Fehler eingeschlichen. An den Objekten <code class=\"language-text\">x</code> und <code class=\"language-text\">y</code> wird jeweils die Eigenschaft <code class=\"language-text\">name</code> verwendet, die Konsolenausgaben greifen aber auf die Eigenschaft <code class=\"language-text\">value</code> zu.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token string\">'use strict'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">example</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    x<span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">let</span> y <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token punctuation\">:</span> <span class=\"token number\">4711</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">example</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Damit das Listing zum Text passt, muss einheitlich die gleiche Eigenschaft verwendet werden:</p>\n<!-- more -->\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token string\">'use strict'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">example</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    x<span class=\"token punctuation\">.</span>value <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">let</span> y <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    value<span class=\"token punctuation\">:</span> <span class=\"token number\">4711</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">example</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<hr>","fields":{"slug":"/posts/javascript-handbook/errata-object-properties","categorySlug":"/category/java-script-handbuch/"},"frontmatter":{"title":"Zugriff auf Objekteigenschaften in Listing 4.3","date":"2017-09-19T22:40:00.000Z","category":"JavaScript Handbuch","description":""}}},{"node":{"html":"<p>Heute wies mich ein Leser darauf hin, dass es bei dem Drag&#x26;Drop-Beispiel aus Listing 12.43 (HTML) und Listing 12.44 (JavaScript) in Firefox Probleme gibt bzw. folgender Code so nicht funktioniert:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'drop'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>id <span class=\"token operator\">===</span> <span class=\"token string\">'target'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Funktioniert nicht in Firefox</span>\n        event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">+=</span> event<span class=\"token punctuation\">.</span>dataTransfer<span class=\"token punctuation\">.</span><span class=\"token function\">getData</span><span class=\"token punctuation\">(</span><span class=\"token string\">'text/html'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<!-- more -->\n<p>Der Grund dafür ist, dass die Eigenschaft <code class=\"language-text\">srcElement</code> eine <a href=\"https://msdn.microsoft.com/en-us/library/ms534638.aspx\">proprietäre Eigenschaft</a> des Internet Explorers ist und daher nicht von allen Browsern unterstützt wird. Stattdessen sollte (wie im übrigen Listing auch) die Eigenschaft <code class=\"language-text\">target</code> aus dem <a href=\"https://dom.spec.whatwg.org/#dom-event-target\">DOM Standard</a> verwendet werden:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'drop'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>id <span class=\"token operator\">===</span> <span class=\"token string\">'target'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Funktioniert in Firefox und anderen Browsern</span>\n        event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">+=</span> event<span class=\"token punctuation\">.</span>dataTransfer<span class=\"token punctuation\">.</span><span class=\"token function\">getData</span><span class=\"token punctuation\">(</span><span class=\"token string\">'text/html'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Alternativ lässt sich als Fallback für ältere Internet Explorer auch die Schreibweise <code class=\"language-text\">event.target || event.srcElement</code> verwenden.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'drop'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> targetElement <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>target <span class=\"token operator\">||</span> event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>targetElement<span class=\"token punctuation\">.</span>id <span class=\"token operator\">===</span> <span class=\"token string\">'target'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        targetElement<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">+=</span> event<span class=\"token punctuation\">.</span>dataTransfer<span class=\"token punctuation\">.</span><span class=\"token function\">getData</span><span class=\"token punctuation\">(</span><span class=\"token string\">'text/html'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Konsequenterweise ist es dann sinnvoll, entsprechendes Konstrukt auch in den anderen Event-Listenern zu verwenden:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dragenter'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> targetElement <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>target <span class=\"token operator\">||</span> event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">;</span>\n    targetElement<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dragover'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> targetElement <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>target <span class=\"token operator\">||</span> event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">;</span>\n    targetElement<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dragover\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<hr>\n<p><strong>Merke</strong></p>\n<p>Die Eigenschaft <code class=\"language-text\">srcElement</code> ist nicht im DOM Standard definiert und sollte daher nicht bzw. wenn dann nur als Fallback in Produktivsystemen verwendet werden.</p>\n<hr>","fields":{"slug":"/posts/javascript-handbook/drag-and-drop/","categorySlug":"/category/java-script-handbuch/"},"frontmatter":{"title":"Drag&Drop-Beispiel in Firefox","date":"2017-04-12T16:50:00.000Z","category":"JavaScript Handbuch","description":""}}}]}},"pageContext":{"isCreatedByStatefulCreatePages":false,"tag":"Errata","currentPage":0,"postsLimit":5,"postsOffset":0,"prevPagePath":"/tag/errata","nextPagePath":"/tag/errata/page/1","hasPrevPage":false,"hasNextPage":false}}}