sollte ich alle symbolleistenelemente in menüs aufnehmen?
<p>eine anwendung, an der ich arbeite, verfügt über eine symbolleiste, die nicht alle schaltflächen als befehle in den menüs der anwendung enthält. für mich ist das ziemlich unangenehm.</p><p>die <a href="http://java.sun.com/products/jlf/ed1/dg/higm.htm">java look and feel design guidelines</a> erwähnung:</p><blockquote> <ul> <li>fügen sie häufig verwendete menüelemente als schaltflächen oder komponenten in ihre symbolleiste ein.</li> <li>treffen sie besondere vorkehrungen für die barrierefreiheit der symbolleiste, wenn ihr fenster keine menüs enthält.</li> </ul> </blockquote><p>sie sagen jedoch nicht ausdrücklich, dass alle elemente in der symbolleiste in einem menü enthalten sein sollten.</p><p>ich bin auf der suche nach soliden gründen, um meinen standpunkt gegenüber dem entwicklerteam zu untermauern. können sie mir eine anleitung geben?</p><p>bisher wäre mein einziges argument, dass sie die tastenkombination für einen bestimmten befehl explizit im menü/in der symbolleiste auflisten können.</p>
<p>hatte gerade genau das gleiche problem wie sie vor kurzem.</p><p>unser team (basierend auf den von ihnen genannten richtlinien und einigen beispielen für viele andere anwendungen) kam zu dem schluss, dass das menü alle funktionen ihrer anwendung und die symbolleiste nur eine teilmenge (die am häufigsten verwendeten funktionen) enthalten sollte.</p><p>wenn die symbolleiste einen anderen satz oder nur einen überlappenden satz von funktionen enthält, ist es für einen benutzer schwieriger, die dinge zu finden, da es keinen einzigen ort gibt, an dem der benutzer nach dem richtigen befehl suchen kann. und der benutzer könnte auch denken, dass sich die funktionalität an einem "noch anderen" ort befindet (zum beispiel in einem kontextmenü).</p><p>außerdem enthalten die gängigsten symbolleistenschaltflächen keinen text. nur ein symbol. um zu wissen, wofür die schaltflächen verwendet werden, muss der benutzer warten, bis der tooltip angezeigt wird (was den benutzer verlangsamen kann), oder einfach auf die schaltflächen in der symbolleiste klicken (dies kann jedoch "angst" haben) er weiß einfach nicht, was er bekommen wird). daher ist es möglicherweise besser, wenn die symbolleiste nicht der einzige ort ist, an dem auf einige funktionen zugegriffen werden kann.</p><p>ein weiterer grund, die symbolleiste nur als unterstützung für das menü zu sehen (schnellerer zugriff auf funktionen über das menü), ist die verwendung von symbolen. wenn der benutzer zum ersten mal nach funktionen sucht, kann er zuerst das menü (das die menüelemente gegebenenfalls mit einigen symbolen anzeigt) anzeigen, den ort, an dem er sicher das findet, wonach er sucht. wenn der benutzer das symbol der menüelemente sieht, kann er später schnell dieselben symbole in der symbolleiste erkennen und die symbolleiste dann direkt verwenden, wenn er das nächste mal dieselbe funktionalität benötigt. sie können sich auf das kapitel "erkennen ist einfach, erinnern ist schwer" aus dem buch "entwerfen mit dem gedanken" von jeff johnson beziehen.</p><p>daher würde ich vorschlagen, dass alles über das menü zugänglich ist und die am häufigsten verwendeten funktionen auch über die symbolleiste zugänglich sind (und natürlich die konsistenz der symbole und begriffe zwischen den menüelementen und den schaltflächen der symbolleiste sowie den quickinfos erhalten bleibt).</p>
<p>erwägen sie die verwendung eines <strong> mehrfachauswahl-designs mit token </strong>. die filter-as-you-type-funktion ist nett, aber nicht unbedingt erforderlich. diese funktionieren gut, wenn im allgemeinen anwendungsfall entweder einer oder nur wenige ausgewählt werden. die benutzerfreundlichkeit nimmt jedoch schnell ab, wenn sie viele auswählen müssen, da der benutzer das menü für jedes element erneut aufrufen muss.</p><p><img src="https://i.stack.imgur.com/fth7o.png" alt="multi-select with tokens, via harvesthq.github.com/chosen"></p><ul> <li> <a href="http://harvesthq.github.com/chosen/">http://harvesthq.github.com/chosen/</a> </li> <li> <a href="http://designingwebinterfaces.com/the-multi-select-solution">http://designingwebinterfaces.com/the-multi-select-solution</a> </li> <li> <a href="http://loopj.com/jquery-tokeninput/">http://loopj.com/jquery-tokeninput/</a> </li> </ul><p>sie haben die tokenisierte mehrfacheingabemethode bereits in ihren e-mail-clients gesehen. <img src="https://i.stack.imgur.com/h1aid.png" alt="multi-select-tokens in email"></p><p>wenn häufig mehrere ausgewählt werden, können sie ein kontrollkästchenmenü <strong> </strong> in betracht ziehen. der unterschied besteht darin, dass das dropdown-menü über alle klicks hinweg dauerhaft bleibt (und die mehrfachauswahl visuell kommuniziert). daher kann der benutzer mit klick-klick-klick schnell mehrere elemente auswählen. für unsere web-app möchten wir dieses design durch hinzufügen der token-funktionalität verbessern.</p><p><img src="https://i.stack.imgur.com/zqizh.png" alt="checkbox menu, via realestate.com.au"></p><ul> <li> <a href="http://www.realestate.com.au/">http://www.realestate.com.au/</a> </li> <li> <a href="http://blogfreakz.com/jquery/jquery-dropdown-check-list/">http://blogfreakz.com/jquery/jquery-dropdown-check-list/</a> </li> </ul> <p>dies kann eine paginierung sein oder auch nicht, aber hier ist, wie ich paginierung in meiner web-app mache:</p><pre><code>|&lt; first, &lt;&lt; previous, page [5] of 12, next &gt;&gt;, last &gt;| </code></pre><p>die äußeren vier optionen sind links, während die <code>page [5] of 12</code> ist ein formular mit dem [5] als eingabefeld. für benutzer mit aktiviertem javascript verstecke ich die schaltfläche "senden" und sende das formular beim ereignis "unfokus" oder drücke den tastendruck. der benutzer hat die option, wie viele zeilen er anzeigen möchte, die er aus einem dropdown-menü auswählen kann: 10, 20, 50, 100, alle. zusätzlich zur paginierung biete ich auch das sortieren und filtern der ergebnisse an, obwohl dies möglicherweise nicht in jeder situation sinnvoll ist.</p><p><strong>bearbeiten</strong>:</p><p>hier ist ein ausschnitt aus einem modell unserer web-app, um ihnen eine bessere vorstellung zu geben. in dieser version wurden die wörter in den schaltflächen weggelassen, werden jedoch nach einer leichten verzögerung als tooltip beim hover angezeigt. möglicherweise stellen sie jedoch fest, dass das beibehalten der wörter zu einer höheren benutzerfreundlichkeit führt.</p><p><img src="https://i.stack.imgur.com/vzbu0.png" alt="virtuosi media&#39;s pagination example"></p><p>ein paar andere dinge, auf die sie hinweisen sollten:</p><ul> <li>die schaltflächen "erste" und "vorherige" wurden deaktiviert, da es sich um die erste seite handelt.</li> <li>das blau zeigt aktive schaltflächen an (ich muss dieses spezielle thema durch eine farbprüfung ausführen, um sicherzustellen, dass farbenblinde benutzer einen unterschied feststellen können).</li> <li>die tasten bleiben immer erhalten, auch wenn sie deaktiviert sind. dies gibt der schnittstelle konsistenz.</li> <li>aufgrund der skalierung habe ich ein eingabefeld anstelle eines dropdown-auswahlfelds ausgewählt. wenn sie 3000 seiten haben, möchten sie nicht nach unten scrollen, um eine seite zu finden</li> <li>die paginierung ist in einer singulären visuellen komponente gruppiert, um ähnlichkeit im zweck anzuzeigen.</li> </ul> Hallo savest8 (André),

gerade Studenten sollen doch wissen, dass jede **endliche Reihe ohne Angabe von Randbedingungen durch unendlich viele Algorithmen "hingebastelt"** werden können. (das Summenzeichen ist ja hier irrelevant)

(unter <http://www.gerdlamprecht.de/Zahlenfolgen.html> zig Beispiele dafür)

Es kann doch nicht sein, dass die intelligenteren Studenten, die mehr Algorithmen (Funktionen usw.) kennen als andere, dann bestraft werden, nur weil "ihre Gedanken" etwas komplexer  waren als bei anderen... 

OK, Nachkommastellen-Algorithmen oder Pseudo-Zufallsgenerator-Algorithmen kann man wohl ausschließen.

( Im Gegenteil, ich würde Studenten Extra-Punkte vergeben, wenn sie neben einer primitiven noch eine andere Lösung finden... )

Die **Angabe von Randbedingungen** halte ich als **ganz wichtige Angabe einer "sauberen Aufgabenstellung"**!

Beispiele:

- Angabe, ob Brüche gekürzt sind (wurde ja schon genannt)

- Angabe, ob Interpolationspolynom (will man dies nicht explizit nennen, kann dies auch indirekt erfolgen, wenn durch Angabe der maximalen (Ganz-)Zahl im Algorithmus & genügen viele Glieder ein Polynom ausgeschlossen wird; Beispiel oben taucht ja die Zahl 9193 auf -> die Randbedingung "im Algorithmus keine Ganzzahlen über 99" oder Maximalzahl von Operatoren & Funktionen... Beispiel: (k(k(k(491*k-3842)+9193)-6610)+192)/192 )

- Angabe, ob höhere Funktionen beteiligt, sonst kommt noch so etwas:

(k(k(7k(271k-2266)+35507)-8102)+960)*Bernoulli(2k+2)/160
  


<http://www.wolframalpha.com/input/?i=table+(k(k(7k(271k-2266)%2B35507)-8102)%2B960)*bernoulli(2k%2B2)%2F160,k%3D0...4>
  


Die Angabe der maximalen Operatoren/Funktionen oder Klammern ist auch wichtig, um Lösungen wie

(2k(k((k-4)k+8)-2)+3)/3*(-1)^k/k!
  


{ LINK: <http://www.wolframalpha.com/input/?i=table++(2k(k((k-4)k%2B8)-2)%2B3)%2F3*(-1)%5Ek%2Fk!,k%3D0...4>

} auszuschließen.

Sonderrolle spielen Primzahlen. Manchmal bereits in der Grundschule erwartet...

einige Programme haben sie integriert {WolframAlpha kennt Prime(x) }

... eine exakte Formel wie <http://www.lamprechts.de/gerd/php/Formeln/Formel-7.png>

wird nie in Aufgaben abgefragt werden...

Was generell viele falsche Gedankengänge vertreiben hilft, sind mehr als 5 Glieder in der Aufgabenstellung.

wenn da noch -243/120 steht, **sieht man schneller**, dass:

- Vorzeichen immer wechselt

- hier nicht gekürzt wurde

- 120 bei der Fakultät auftaucht

- das Interpolationspolynom kaum noch mit üblichen Faktoren dargestellt werden kann (Taschenrechnergenauigkeit reicht nicht mehr) <p>ich verwende <a href="http://noscript.net/features">noscript</a> , aber liste jede site auf, die ich tatsächlich verwenden möchte.</p><blockquote> <p>wenn sie noscript installieren, werden javascript, java, flash silverlight und möglicherweise andere ausführbare inhalte standardmäßig <em> blockiert </em>. sie können <em> die ausführung von </em> javascript/java/... selektiv auf den websites zulassen, denen sie vertrauen. sie können einer site erlauben, skripte vorübergehend auszuführen, wenn sie nur zufällig oder dauerhaft surfen, wenn sie sie häufig besuchen und ihr wirklich vertrauen. dies bedeutet, dass noscript aus ihren eigenen browsergewohnheiten lernt und nach einer weile im hintergrund verschwindet. wenn sie jedoch auf eine schädliche webseite stoßen, wird es sofort wieder angezeigt, um ihren tag zu retten.</p> <p>wenn sie eine site mit blockierten skripten durchsuchen, wird eine benachrichtigung angezeigt, die der vom popupblocker ausgegebenen ähnelt.<br> sehen sie sich das symbol oder das statusleistensymbol an, um die aktuellen noscript-berechtigungen zu erfahren ...</p> <p><img src="https://i.stack.imgur.com/zfxkv.png" alt="http://noscript.net/noscript/ss0.png" title="noscript tooltip screen shot"></p> </blockquote> <p>wenn dies meine entwurfsentscheidung wäre, würde ich wahrscheinlich eher eine option c (modifizierte option a) wählen.</p><h3>erstens, warum nicht 'option b':</h3><p>zum einen gefällt mir die klarheit, dass jedes produkt seinen eigenen tisch hat. wenn es sich nur um eine große tabelle mit einem feld zur bestimmung des typs handelt, ist die beziehung nicht so klar.</p><p>zum anderen würde die indizierungsstrategie immer erfordern, dass dieses typfeld aufgelistet wird. da es sich nur um 4 typen handelt, ist die indexkardinalität extrem niedrig (<code>select * from product\_table where type='x'</code> führt im grunde sowieso einen vollständigen tabellenscan durch)</p><h3>option c.</h3><ul> <li>erstellen sie eine übergeordnete tabelle, die nur die spalten enthält, die alle typen gemeinsam nutzen</li> <li>erstellen sie jeden produkttyp als eigene tabelle mit ihren einzelnen spalten, mit einem zusätzlichen: ein link zur übergeordneten tabelle</li> <li>erstellen sie jede 'link'-tabelle: product\_option, model\_option usw. mit links zu den jeweiligen schlüsseln.</li> <li>für diejenigen mit wechselseitigen links (model\_option, option\_model) erstellen sie auch diese tabellen. dies erhöht die klarheit ihrer joins für alle, die sich das ansehen.</li> </ul><p>der nachteil ist die komplexität, sicherzustellen, dass waisen vermieden werden, wenn dinge aktualisiert/gelöscht werden, und zunächst die abfragen zu entwerfen, die diese tabellen verwenden.</p> <h2>moderne html5-techniken zum ändern von klassen</h2><p>moderne browser haben <a href="https://developer.mozilla.org/en-us/docs/dom/element.classlist"><strong>classlist</strong></a> hinzugefügt, das methoden zur verfügung stellt, mit denen klassen leichter ohne bibliotheken bearbeitet werden können:</p><pre><code>document.getelementbyid("myelement").classlist.add('myclass'); document.getelementbyid("myelement").classlist.remove('myclass'); if ( document.getelementbyid("myelement").classlist.contains('myclass') ) document.getelementbyid("myelement").classlist.toggle('myclass'); </code></pre><p>leider funktionieren diese in internet explorer vor version 10 nicht, obwohl es ein <a href="http://en.wikipedia.org/wiki/shim\_(computing)">shim</a> gibt, um die unterstützung für ie8 und ie9 hinzuzufügen, die unter <a href="https://developer.mozilla.org/en-us/docs/dom/element.classlist">diese seite</a> verfügbar ist. es wird jedoch immer mehr <a href="http://caniuse.com/#feat=classlist">unterstützt</a> .</p><h2>einfache browserübergreifende lösung</h2><p>die standard-javascript-methode zur auswahl eines elements ist <a href="https://developer.mozilla.org/en-us/docs/dom/document.getelementbyid"><code>document.getelementbyid("id")</code></a> . dies wird in den folgenden beispielen verwendet. sie können elemente natürlich auch auf andere weise erhalten. in der richtigen situation können sie stattdessen einfach <code>this</code> verwenden ins detail geht dies nicht in den rahmen der antwort.</p><h3>so ändern sie alle klassen für ein element:</h3><p>um alle vorhandenen klassen durch eine oder mehrere neue klassen zu ersetzen, legen sie das classname-attribut fest:</p><pre><code>document.getelementbyid("myelement").classname = "myclass"; </code></pre><p>(sie können eine durch leerzeichen getrennte liste verwenden, um mehrere klassen anzuwenden.)</p><h3>so fügen sie einem element eine zusätzliche klasse hinzu:</h3><p>um einem element eine klasse hinzuzufügen, ohne vorhandene werte zu entfernen/zu beeinflussen, fügen sie ein leerzeichen und den neuen klassennamen wie folgt hinzu:</p><pre><code>document.getelementbyid("myelement").classname += " myclass"; </code></pre><h3>so entfernen sie eine klasse aus einem element:</h3><p>um eine einzelne klasse zu einem element zu entfernen, ohne andere potenzielle klassen zu beeinflussen, ist ein einfacher regex-ersetzen erforderlich:</p><pre><code>document.getelementbyid("myelement").classname = document.getelementbyid("myelement").classname.replace ( /(?:^|\s)myclass(?!\s)/g , '' ) /* code wrapped for readability - above is all one statement */ </code></pre><p>eine erklärung dieser regex lautet wie folgt:</p><pre><code>(?:^|\s) # match the start of the string, or any single whitespace character myclass # the literal text for the classname to remove (?!\s) # negative lookahead to verify the above is the whole classname # ensures there is no non-space character following # (i.e. must be end of string or a space) </code></pre><p>das flag <code>g</code> weist das ersetzen an, nach bedarf zu wiederholen, falls der klassenname mehrmals hinzugefügt wurde.</p><h3>so prüfen sie, ob eine klasse bereits auf ein element angewendet wurde:</h3><p>der gleiche reguläre ausdruck, der oben zum entfernen einer klasse verwendet wurde, kann auch zur überprüfung verwendet werden, ob eine bestimmte klasse vorhanden ist:</p><pre><code>if ( document.getelementbyid("myelement").classname.match(/(?:^|\s)myclass(?!\s)/) ) </code></pre><p><br/></p><h3>zuweisen dieser aktionen zu onclick-ereignissen:</h3><p>es ist zwar möglich, javascript direkt in die html-ereignisattribute (z. b. <code>onclick="this.classname+=' myclass'"</code>) zu schreiben, dies wird jedoch nicht empfohlen. insbesondere bei größeren anwendungen wird durch die trennung von html-markup von javascript-interaktionslogik ein wartungsfähigerer code erzielt.</p><p>der erste schritt dazu ist das erstellen einer funktion und das aufrufen der funktion im onclick-attribut. beispiel:</p><pre><code>&lt;script type="text/javascript"&gt; function changeclass(){ // code examples from above } &lt;/script&gt; ... &lt;button onclick="changeclass()"&gt;my button&lt;/button&gt; </code></pre><p><sub><em>(es ist nicht erforderlich, dass dieser code in skript-tags enthalten ist. dies ist lediglich der kürze halber als beispiel gedacht. das einschließen von javascript in eine andere datei ist möglicherweise geeigneter.)</em></sub></p><p>der zweite schritt besteht darin, das onclick-ereignis aus dem html-code in javascript zu verschieben, beispielsweise mit <a href="https://developer.mozilla.org/en-us/docs/dom/element.addeventlistener">addeventlistener</a> </p><pre><code>&lt;script type="text/javascript"&gt; function changeclass(){ // code examples from above } window.onload = function(){ document.getelementbyid("myelement").addeventlistener( 'click', changeclass); } &lt;/script&gt; ... &lt;button id="myelement"&gt;my button&lt;/button&gt; </code></pre><p>(beachten sie, dass der window.onload-teil erforderlich ist, damit der inhalt dieser funktion <em>ausgeführt wird, nachdem der html-code</em> vollständig geladen wurde. andernfalls ist das myelement möglicherweise nicht vorhanden, wenn der javascript-code aufgerufen wird, sodass die zeile fehlschlägt .)</p><p><br/></p><h2>javascript frameworks und bibliotheken</h2><p>der obige code ist alles in standard-javascript enthalten. es ist jedoch üblich, entweder ein framework oder eine bibliothek zu verwenden, um allgemeine aufgaben zu vereinfachen und von behobenen fehlern und edge-fällen zu profitieren, an die sie beim schreiben des codes nicht denken.</p><p>während einige leute es für übertrieben halten, ein ~ 50 kb-framework für das einfache ändern einer klasse hinzuzufügen, ist die überlegung, wenn sie umfangreiche javascript-arbeiten ausführen oder etwas, das ungewöhnliches cross-browser-verhalten hat, eine überlegung wert.</p><p><em>(in groben zügen handelt es sich bei einer bibliothek um eine reihe von werkzeugen, die für eine bestimmte aufgabe entwickelt wurden, während ein framework im allgemeinen mehrere bibliotheken enthält und eine reihe von aufgaben ausführt.)</em></p><p>die obigen beispiele wurden im folgenden mit <a href="http://jquery.com">jquery</a> wiedergegeben, wahrscheinlich der am häufigsten verwendeten javascript-bibliothek (obwohl es auch andere gibt, die es zu untersuchen gilt).</p><p>(beachten sie, dass <code>$</code> hier das jquery-objekt ist.)</p><h3>klassen mit jquery ändern:</h3><pre><code>$('#myelement').addclass('myclass'); $('#myelement').removeclass('myclass'); if ( $('#myelement').hasclass('myclass') ) </code></pre><p>darüber hinaus bietet jquery eine verknüpfung zum hinzufügen einer klasse, wenn sie nicht angewendet wird, oder zum entfernen einer klasse, die folgendes ausführt:</p><pre><code>$('#myelement').toggleclass('myclass'); </code></pre><p><br/></p><h3>zuweisen einer funktion zu einem klickereignis mit jquery:</h3><pre><code>$('#myelement').click(changeclass); </code></pre><p>oder, ohne eine id zu benötigen:</p><pre><code>$(':button:contains(my button)').click(changeclass); </code></pre><p><br/></p> "Apps " haben das unbändige Verlangen, - NICHT- auf einer SD- Karte zu parken. Die meisten brauchen eine innige Bildung zum System und würden 'verschoben' nicht starten und funktionieren. Deshalb bieten sie die SD- Funktion erst garnicht an. .. diese auskunft ist das papier nicht wert: andere zusammenarbeit und verträge mit fm sind nicht die frage. ganz klar geht es ja um [b]pt als angestellte[/b]. das ist nicht beantwortet. die zulassungsrichtlinien beschreiben, was geht, nicht das, was verboten ist. einfach lesen oder eben auf den bauch fallen.
mfg hgb [emoji]slightly\_smiling\_face[/emoji] man konnte es bisher auch nicht sperren und im grunde ist es, wegen dem handshake-verfahren, auch nicht wirklich nötig.

 

dennoch haben wir jetzt eine möglichkeit gefunden eine sperre individuell einzurichten.

 

das ist doch gut, oder etwa nicht? :relaxed: Unter optionen sollte es irgendwo "joystick" oder "controller" geben. Da musst du drauf drücken nachdem du daein joystick angeschlossen hast. Dann müsstets du die Tasten zuweisen können.