<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Information Centre &#187; prototype</title>
	<atom:link href="http://my.center-of.info/tag/prototype/feed/" rel="self" type="application/rss+xml" />
	<link>http://my.center-of.info</link>
	<description>“Wenn etwas schon da war, wie kann man es dann patentieren?” D.E.Knuth, 2002</description>
	<lastBuildDate>Mon, 28 Sep 2009 23:04:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IE: Change Event und Autocompletion</title>
		<link>http://my.center-of.info/2009/01/17/ie-change-event-und-autocompletion/</link>
		<comments>http://my.center-of.info/2009/01/17/ie-change-event-und-autocompletion/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 12:07:06 +0000</pubDate>
		<dc:creator>Haf</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://my.center-of.info/?p=105</guid>
		<description><![CDATA[Im IE (7) gibt es Probleme mit dem Change-Event bei einem Input-Feld, wenn dies auch Autocompletion von script.aculo.us[1] beinhaltet.

Wird ein Input-Feld bezüglich den Veränderungen beobachtet ($('field').observe('change', ...')) wird beim IE dieser Event dann gefeuert, wenn der Focus das Feld verlässt.
Hat das Input-Feld nun auch Autocompletion, wird dieser Event nicht mehr gefeuert, wenn, der Nutzer mit [...]]]></description>
			<content:encoded><![CDATA[<p>Im IE (7) gibt es Probleme mit dem Change-Event bei einem Input-Feld, wenn dies auch Autocompletion von script.aculo.us[1] beinhaltet.</p>
<p><span id="more-105"></span></p>
<p>Wird ein Input-Feld bezüglich den Veränderungen beobachtet (<code>$('field').observe('change', ...')</code>) wird beim IE dieser Event dann gefeuert, wenn der Focus das Feld verlässt.</p>
<p>Hat das Input-Feld nun auch Autocompletion, wird dieser Event nicht mehr gefeuert, wenn, der Nutzer mit Tab oder Enter ein Eintrag aus der Autocompletion-Liste auswählt.</p>
<p>Hier muss man den Event selbst feuern, wenn der Eintrag aus der Autocompletion-Liste ausgewählt wurde. Da man bei Prototype keine native Events abfeuern kann, nutzt man die eigenen Events [2] nutzen.</p>
<p>script.aculo.us Autocompletion ruft die Funktion <code>selectEntry</code> wenn ein Eintrag ausgewählt wurde. Nun kann man diese Funktion überschreiben und nach der Auswahl das nötige Event feuern. Natürlich nur beim IE ansonsten hat man das Event doppel. In dem folgenden Listing wird dies beispielhaft für <code>Autocompleter.Local</code> gemacht</p>
<pre class="brush: js">
var al = new Autocompleter.Local(&#039;field&#039;, &#039;auto_box&#039;, localResults, { });
    // overwrite the selecEntry() function to fires the change event in IE
    al.selectEntry = function() {
       // the next two lines are the same from the original function!
       this.active = false;
       this.updateElement(this.getCurrentEntry());

       // the additional functionality
       // fire the event only for IE, cause IE does not fire this existing change event
       if(Prototype.Browser.IE) {
          var elem = $(&#039;field&#039;);
          elem.fire(&#039;clazz:event&#039;, ...);
       }
};
</pre>
<p>Links:<br />
[1] <a title="script.aculo.us" href="http://wiki.github.com/madrobby/scriptaculous" target="_blank">script.aculo.us</a><br />
[2] <a title="Prototype API: Element.fire" href="http://prototypejs.org/api/element/fire" target="_blank">Prototype Element.fire</a></p>
]]></content:encoded>
			<wfw:commentRss>http://my.center-of.info/2009/01/17/ie-change-event-und-autocompletion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototype each(), IE und null</title>
		<link>http://my.center-of.info/2008/11/26/prototype-each-ie-und-null/</link>
		<comments>http://my.center-of.info/2008/11/26/prototype-each-ie-und-null/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 11:52:28 +0000</pubDate>
		<dc:creator>Haf</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://my.center-of.info/?p=72</guid>
		<description><![CDATA[Bei der Arbeit mit JavaScript kommt man irgendwann in die Situation durch ein Array zu iterieren. Dabei nutzt man nicht immer einfach indizierte Arrays, sondern oft auch Arrays mit Lücken in den Indizes oder sogar assoziative Arrays.
Diese letzten Varianten kann man eigentlich genauso durchlaufen, wie die erste, wenn da nicht der IE wäre. Der IE [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der Arbeit mit JavaScript kommt man irgendwann in die Situation durch ein Array zu iterieren. Dabei nutzt man nicht immer einfach indizierte Arrays, sondern oft auch Arrays mit Lücken in den Indizes oder sogar assoziative Arrays.<br />
Diese letzten Varianten kann man eigentlich genauso durchlaufen, wie die erste, wenn da nicht der IE wäre. Der IE hat Probleme mit Lücken in Arrays.<br />
<span id="more-72"></span><br />
Wie man im folgenden Listing sehen kann, gibt es beim Firefox fast die erwartbaren Ergebnisse.<br />
Nur fast. Denn beim ersten Output stimmen die Indizes nicht. Das gleiche Problem hat man jedoch auch beim IE.</p>
<pre class="brush: js">
var ar1 = new Array();
ar1[2] = &#039;A&#039;;
ar1[13] = &#039;B&#039;;
ar1[23] = &#039;C&#039;;

var out = &#039;&#039;;
ar1 = ar1.compact();
ar1.each(function(item, index) {
  out += index + &#039;: &#039; + item + &#039;, &#039;;
});
// =&gt; out = 0: A, 1: B, 2: C, 

out = &#039;&#039;;
for(i in ar1) {
  if( (typeof ar1[i]) != &#039;function&#039; )
    out += i + &#039;: &#039; + ar1[i] + &#039;, &#039;;
}
// =&gt; out = 2: A, 13: B, 23: C, 

var ar2 = {
 a: &#039;Part_1&#039;,
 b: &#039;Part_2&#039;,
 sum: &#039;Part_1_2&#039;
};

out = &#039;&#039;;
for(a in ar2) {
 out += a + &#039;: &#039; + ar2[a] + &#039;, &#039;;
}
// =&gt; out = a: Part_1, b: Part_2, sum: Part_1_2,
</pre>
<p>Der IE gibt folgendes aus:</p>
<pre class="brush: php">
// 1.output: 0: undefined, 1: undefined, 2: A, 3: undefined, 4: undefined, 5: undefined, 6: undefined, 7: undefined, 8: undefined, 9: undefined, 10: undefined, 11: undefined, 12: undefined, 13: B, 14: undefined, 15: undefined, 16: undefined, 17: undefined, 18: undefined, 19: undefined, 20: undefined, 21: undefined, 22: undefined, 23: C, 

// 2.output: 2: A, 13: B, 23: C,
// 3.output: a: Part_1, b: Part_2, sum: Part_1_2,
</pre>
<p>Wie man beim 1. Output sehen kann, werden die Lücken mit angezeigt.<br />
Dies kann man verhindern, in dem man das Array zusammenfasst und das geht z.B. mit der Prototype Funktion <a href="http://www.prototypejs.org/api/array/compact" title="Prototype API für Array.compact()" target="_blank">Array.compact()</a>.<br />
Also ein</p>
<pre class="brush: js">
 ar1 = ar1.compact();
</pre>
<p>hilft hier.</p>
<p>Bei der zweiten Variante werden die korrekten Indizes beibehalten. Hier muss man jedoch bedenken, dass man durch das ganze JavaScript Object iteriert und einem meistens die Funktionen nicht interessieren. </p>
<p>Und das letzte Beispiel zeigt, dass dies auch bei einem eigenen Objekt funktioniert. Auch dort sollte man Funktions-Filter einbauen, wenn erwünscht.</p>
<p>Links:<br />
[1] <a href="http://www.prototypejs.org/api/array/compact" title="Prototype API" target="_blank">http://www.prototypejs.org/api/array/compact</a></p>
]]></content:encoded>
			<wfw:commentRss>http://my.center-of.info/2008/11/26/prototype-each-ie-und-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
