problem
Nightloewe
- javascript
0 Klawischnigg0 Jeena Paradies0 MudGuard0 Nightloewe1 Sinnvoller Titel, Problembeschreibung
Der Martin- zu diesem forum
Also ich habe ein Problem undzwar möchte ich das ein li und ein a beide mit onclick die selbe Funktion ausführen doch dies geht nicht wenn ich es bei dem li rein tu geht es bei dem a nicht...
Hier der Code
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/menu.css" media="screen" />
</head>
<Body>
<script type="Text/Javascript">
function Sub1Show() {
if(document.getElementById('ul1').style.display=='block')
{document.getElementById('ul1').style.display='none';}
else
{document.getElementById('ul1').style.display='block';}}
</script>
<div id="cmdmenu">
<ul id="navi">
<li id="img" style="border-radius: 5px;" onclick="window.location.href="index.php"><img src="img/menulogo.png" style="border-radius: 5px;"></li id="img">
<li id="cnsites" onclick="Sub1Show()"><a href="#show" onclick="Sub1Show()">Craft Network Sites</a> </li id="cnsites">
<ul id="ul1">
<li id="wvm" onclick="window.location.href = 'http://weltvonminecraft.de/'"><a href="http://weltvonminecraft.de">weltvonminecraft.de</a></li>
<li id="wvm" onclick="window.location.href = 'http://maltesermailo.de/'"><a href="http://maltesermailo.de">maltesermailo.de</a></li>
<li id="wvm" onclick="window.location.href = '#'"><a href="#">Craft Network WEBSITE not online</a></li>
</ul id="ul1">
<li id="Loginli"><a href="#">Login</a>
<ul>
<li>ka</li>
<li></li>
<li></li>
</ul>
</li>
</ul>
</div id="cmdmenu">
</Body>
Hi there,
Also ich habe ein Problem undzwar möchte ich das ein li und ein a beide mit onclick die selbe Funktion ausführen doch dies geht nicht wenn ich es bei dem li rein tu geht es bei dem a nicht...
<li id="cnsites" onclick="Sub1Show()"><a href="#show" onclick="Sub1Show()">Craft Network Sites</a> </li id="cnsites">
Abgesehen vom Unsinn, einem schliessenden Tag eine ID zu verpassen (was zusätzlich Probleme verursachen könnte, weil Du in dem Fall eine ID zweimal vergeben hast, könntest Du darauf ohnehin nicht zugreifen) wirst Du Dich entscheiden müssen, was passieren soll, wenn man auf den Link klickt. Ich meine, dafür sind Links ja da, daß dann etwas passiert, wenn man drauf klickt; dein onclick-Eventhandler auf das li-Element ist in jedem Fall komplett überflüssig.
Und wie gesagt, beim A-Element wirst Du um eine Entscheidung nicht herumkommen, was passieren soll, wenn man draufklickt. Ausser in Spezialfällen ist ein onclick-Event in einem A-Element ohnehin komplett sinnfrei. Da wäre in Deinem Fall noch
~~~html
<a href="javascript:Sub1Show()">Craft Network Sites</a>
sinnvoller als Deine bestehen Konstruktion. Auch wenn jetzt sicher irgendjemand im Forum wieder herummösern wird, daß es kein javascript-Protokoll gibt - es funktioniert in jedem Browser...
Hallo,
dein onclick-Eventhandler auf das li-Element ist in jedem Fall komplett überflüssig.
Ich glaube er/sie versucht die komplette Breite des <li> klickbar zu machen, da wäre das vielleicht gar nicht so überflüssig, ach wenn es sinnvoller wäre das <a> so groß zu machen wie das <li>.
/Jeena
Hallo,
Also ich habe ein Problem undzwar möchte ich das ein li und ein a beide mit onclick die selbe Funktion ausführen doch dies geht nicht wenn ich es bei dem li rein tu geht es bei dem a nicht...
Also grundsätzlich geht das schon ohne probleme, aber eigentlich macht man das so dass man mit CSS das <a> so groß macht, dass es das ganze <li> ausfüllt, so dass man dazu gar kein JavaScript mehr braucht. Grundsätzlich reicht es dem <a> display: block; zu geben, siehe dazu dieses Beispiel bei Listmatic.
Ansonsten würde ich es so machen:
<ul id="ul1">
<li onclick="goTo(this)"><a href="http://google.com">Google</a></li>
</ul>
<script>
[code lang=javascript] function goTo(obj) {
var url = obj.getElementsByTagName("a")[0].href;
document.window.location.href = url;
}
</script>[/code]
Und am besten auch noch das onclick raus aus dem HTML und in die externe JavaScript Datei vielleicht mit jQuery (einer bibliothek die einiges vereinfacht) oder so:
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});
/Jeena
હેલો
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});
Wie nennt man diese Schreibweise einer Funktion?
Was ist der Unterschied zwischen
`function whatever() {}`{:.language-javascript}
und
`$(function() {});`{:.language-javascript}
Ich kenne diese Schreibweise zwar, weiss aber nichts damit anzufangen. Wann bringt es Vorteile, Funktionen so zu schreiben?
બાય
--
.
..:
Hi,
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});
>
> Wie nennt man diese Schreibweise einer Funktion?
Immediately Invoked Function Expression (IIFE), hier die jQuery-Notation davon.
> Was ist der Unterschied zwischen
>
> `function whatever() {}`{:.language-javascript}
>
> und
>
> `$(function() {});`{:.language-javascript}
... und der Variante ohne jQuery
`(function() {}) ();`{:.language-javascript}
Beispiel 1 definiert eine Funktion mit einem Namen, die durch Angabe ihres Namens und eines Klammernpaares (ggf. mit Parameterliste) bei Bedarf aufgerufen wird. Beispiel 2 und 3 definieren eine anonyme (namenlose) Funktion, die im jQuery-Fall wegen des umschließenden $(), im anderen Fall durch die angehängten Funktionsklammern sofort nach der Deklaration aufgerufen wird.
Vom Kontrollfluss her verhält sich so eine IIFE also genauso, als stünde der Code des Funktionsrumpfes direkt im Script. Der Vorteil ist jedoch, dass die IIFE durch die Kapselung in eine Funktion einen eigenen Namensraum hat und lokale Veriablen verwenden kann.
> Wann bringt es Vorteile, Funktionen so zu schreiben?
Wenn man globale Variablen um jeden Preis vermeiden möchte, etwa weil sie mit anderen Scripten kollidieren könnten.
Ciao,
Martin
--
Gibst du dem Opi Opium, haut Opium den Opi um.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
હેલો
Wann bringt es Vorteile, Funktionen so zu schreiben?
Wenn man globale Variablen um jeden Preis vermeiden möchte, etwa weil sie mit anderen Scripten kollidieren könnten.
Werden Variablen, die ich in einer Funktion speichere, Global?
// bsp. 1
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});
// bsp. 2
function checkclick() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
}
Ist „url“ im 2. Bsp. Global, wenn ich es so schreibe? Ich ging davon aus, dass Variablen Global werden, wenn ich das „var“ vor dem Variablennamen weglasse?
Müsste ich, wenn ich bspw. Klicks mit Anonymen Funktionen überwache, noch auf „Document Ready“ warten, wenn meine Scripte eh am ende von body stehen?
બાય
n'Abend,
Wann bringt es Vorteile, Funktionen so zu schreiben?
Wenn man globale Variablen um jeden Preis vermeiden möchte, etwa weil sie mit anderen Scripten kollidieren könnten.
Werden Variablen, die ich in einer Funktion speichere, Global?
ja, wenn sie ohne das Schlüsselwort "var" erzeugt werden. Sonst nicht.
// bsp. 1
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});// bsp. 2
function checkclick() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
}
>
> Ist „url“ im 2. Bsp. Global, wenn ich es so schreibe? Ich ging davon aus, dass Variablen Global werden, wenn ich das „var“ vor dem Variablennamen weglasse?
Du liegst richtig, url ist in beiden Beispielen global. Aber der Unterschied ist, dass der Code der anonymen Funktion in Beispiel 1 \*sofort\* ausgeführt wird, der in Beispiel 2 erst, wenn die Funktion ausdrücklich aufgerufen wird. Du müsstest also eigentlich dein Beispiel 1 mit einer Variante \*ohne\* Kapselung in einer Funktion vergleichen.
~~~javascript
// Code-Block 1
(function()
{ var x1 = 42;
// ...
// irgendwelcher Code
}) ();
// Code-Block 2
var x2 = 24;
// ...
// irgendwelcher Code
Sowohl Block 1 als auch Block 2 werden sofort ausgeführt, wenn das Dokument bzw. das Script geparst wird. Aber x1 ist lokal in einer Funktion gekapselt, also global nicht sichtbar. Dagegen liegt x2 im globalen Scope (es ist automatisch eine Eigenschaft des window-Objekts), weil es nicht gekapselt ist.
Müsste ich, wenn ich bspw. Klicks mit Anonymen Funktionen überwache, noch auf „Document Ready“ warten, wenn meine Scripte eh am ende von body stehen?
Nein. Wenn du sie aber im head-Element notierst, oder relativ weit "oben" im body, dann schon. Wichtig ist, dass das Element, dessen Ereignisse du überwachen willst, zu dem Zeitpunkt schon existiert.
So long,
Martin
હેલો
Ist „url“ im 2. Bsp. Global, wenn ich es so schreibe? Ich ging davon aus, dass Variablen Global werden, wenn ich das „var“ vor dem Variablennamen weglasse?
Du liegst richtig, url ist in beiden Beispielen global.
Ich nehme mal an, dass war ein Schreibfehler? Ansonsten wäre ich etwas irritiert :)
Aber der Unterschied ist, dass der Code der anonymen Funktion in Beispiel 1 *sofort* ausgeführt wird, der in Beispiel 2 erst, wenn die Funktion ausdrücklich aufgerufen wird.
Das fiel mir schon auf, als ich die Beispiele aufschrieb. Ich muss mal schauen, ob ich was damit anfangen kann. Ich lerne gerade, wie ich mit JQuery alles in Funktionen auslagere*, da wird das sicherlich hilfreich sein.
// Code-Block 1
(function()
{ var x1 = 42;
// ...
// irgendwelcher Code
}) ();// Code-Block 2
var x2 = 24;
// ...
// irgendwelcher Code
>
> Sowohl Block 1 als auch Block 2 werden sofort ausgeführt, wenn das Dokument bzw. das Script geparst wird. Aber x1 ist lokal in einer Funktion gekapselt, also global nicht sichtbar. Dagegen liegt x2 im globalen Scope (es ist automatisch eine Eigenschaft des window-Objekts), weil es nicht gekapselt ist.
Das heisst, die Anonyme Funktion macht nur etwas, dessen Resultat nur in diesem Moment, und nur an dieser Stelle gebraucht wird? Also eher selten?
Wobei, was nützt mir das Resultat einer Funktion, auf das ich gar nicht zugreifen kann?
> Wichtig ist, dass das Element, dessen Ereignisse du überwachen willst, zu dem Zeitpunkt schon existiert.
Kann es hier trotzdem zu unerwarteten komplikationen kommen, z. B. das Elemente, die definitiv im DOM sind, dennoch mit Jquery nicht ansprechbar sind? Ich häng meine Scripte immer ans body-ende, brauch aber trotzdem für das ein oder andere noch `$(document).ready`{:.language-javascript}.
બાય
--
.
..:
Hi,
Du liegst richtig, url ist in beiden Beispielen global.
Ich nehme mal an, dass war ein Schreibfehler? Ansonsten wäre ich etwas irritiert :)
ertappt, verdammt. Die Erkältung trübt meine Konzentration. ;-)
Das heisst, die Anonyme Funktion macht nur etwas, dessen Resultat nur in diesem Moment, und nur an dieser Stelle gebraucht wird? Also eher selten?
Wenn du eine anonyme Funktion (d.h. ein Funktionsobjekt) einem Eventhandler zuweist, kann sie beliebig oft aufgerufen werden. Wenn sie aber nur "einfach so" im Code steht, wird sie genau einmal ausgeführt, wenn der Code geparst wird.
Wobei, was nützt mir das Resultat einer Funktion, auf das ich gar nicht zugreifen kann?
Das Resultat der Funktion ("return") ist in dem Fall tatsächlich unbrauchbar, weil niemand es entgegennimmt. Es kann also nur darum gehen, was die Funktion sonst so alles tut. Eine anonyme, sofort ausgeführte Funktion ist wirklich nur eine Alternative zu einem Stück Code, der "offen" rumsteht und beim Parsen des Dokuments ausgeführt wird. Nur ohne den globalen Namespace zu verschmutzen.
Wichtig ist, dass das Element, dessen Ereignisse du überwachen willst, zu dem Zeitpunkt schon existiert.
Kann es hier trotzdem zu unerwarteten komplikationen kommen, z. B. das Elemente, die definitiv im DOM sind, dennoch mit Jquery nicht ansprechbar sind? Ich häng meine Scripte immer ans body-ende, brauch aber trotzdem für das ein oder andere noch$(document).ready
.
Hm, da muss ich passen; ich nutze Javascript selbst nicht so intensiv, dass ich darauf eine sichere Antwort geben könnte. Ich vermute, deine Bedenken sind unbegründet, kann es aber nicht mit Bestimmtheit sagen. Möglich, dass es hin und wieder exotische Konstellationen gibt, bei denen du doch noch aufpassen musst.
So long,
Martin
હેલો
Die Erkältung trübt meine Konzentration. ;-)
Gute Besserung!
Wenn du eine anonyme Funktion (d.h. ein Funktionsobjekt) einem Eventhandler zuweist, kann sie beliebig oft aufgerufen werden.
Würde mir doch an der stelle aber irgendwie nichts bringen, da ich ja kein Rückgabewert habe?
// Freihand
$('#elem').on('click', function() {
$(function() {
// script, das was tut
});
});
Wie könnte hier eine Anonyme Funktion nützlich sein? Etwas berechnen lassen bringt mir ja nichts ohne return.
Es kann also nur darum gehen, was die Funktion sonst so alles tut. Eine anonyme, sofort ausgeführte Funktion ist wirklich nur eine Alternative zu einem Stück Code, der "offen" rumsteht und beim Parsen des Dokuments ausgeführt wird. Nur ohne den globalen Namespace zu verschmutzen.
Also statt die Eventhandler einfach so ins Script zu schreiben, lieber „privatisieren“? Da liest sich das „ja“ ja praktisch selbst aus der frage heraus ;)
બાય
n'Abend,
Die Erkältung trübt meine Konzentration. ;-)
Gute Besserung!
danke, ja ... morgen bleibe ich mal noch zuhause, übermorgen wird's schon wieder okay sein. Hoffe ich.
// Freihand
$('#elem').on('click', function() {
$(function() {
// script, das was tut
});
});
>
> Wie könnte hier eine Anonyme Funktion nützlich sein? Etwas berechnen lassen bringt mir ja nichts ohne return.
Doch, warum nicht? Sie könnte "live" im DOM rumstochern, Eigenschaften von DOM-Knoten verändern, so das Erscheinungsbild oder das Verhalten der Webseite beeinflussen. Das ist doch schon eine ganze Menge.
> > Es kann also nur darum gehen, was die Funktion sonst so alles tut. Eine anonyme, sofort ausgeführte Funktion ist wirklich nur eine Alternative zu einem Stück Code, der "offen" rumsteht und beim Parsen des Dokuments ausgeführt wird. Nur ohne den globalen Namespace zu verschmutzen.
> Also statt die Eventhandler einfach so ins Script zu schreiben, lieber „privatisieren“? Da liest sich das „ja“ ja praktisch selbst aus der frage heraus ;)
Jein. Die Eventhandler sind ja meist sowieso in sich abgeschlossene Funktionen. Es geht vor allem um Initialisierungen, die nur einmal beim Laden der Webseite durchlaufen werden. Mir fällt gerade kein Beispiel ein, aber wenn eine solche Initialisierung vielleicht eine for-Schleife enthält, möchte man doch sicher sein, dass die Schleifenvariable sich nicht zufällig mit einer gleichnamigen Variablen eines anderen, zusätzlich eingebundenen Scripts beißt. Gern werden die Laufvariablen von Schleifen ja i oder n genannt. Man kann sich natürlich einen phantasievollen Namen ausdenken, bei dem die Wahrscheinlichkeit einer Kollision sehr gering wird; wenn man dieses Stückchen Code aber in eine Funktion packt und i nur lokal deklariert, hat man das Problem ganz sicher vermieden.
Schönen Abend noch,
Martin
--
Kopflosigkeit schützt nicht vor Migräne.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
હેલો
Doch, warum nicht? Sie könnte "live" im DOM rumstochern, Eigenschaften von DOM-Knoten verändern, so das Erscheinungsbild oder das Verhalten der Webseite beeinflussen. Das ist doch schon eine ganze Menge.
Stimmt. Aber so wie es aussieht, gibt es sogar die möglichkeit, sich einen Wert zurück geben zu lassen.
aber wenn eine solche Initialisierung vielleicht eine for-Schleife enthält, möchte man doch sicher sein, dass die Schleifenvariable sich nicht zufällig mit einer gleichnamigen Variablen eines anderen, zusätzlich eingebundenen Scripts beißt.
Das ist ein Argument. Mein Kopf qualmt schon vor lauter Namen, die ich mir für meine Funktionen und Variablen einfallen lassen muss (und ich bin noch nicht einmal bei 20% meines vorhabens angelangt).
wenn man dieses Stückchen Code aber in eine Funktion packt und i nur lokal deklariert, hat man das Problem ganz sicher vermieden.
Na immerhin, dass mache ich die ganze Zeit so, quasi Instinktiv.
Auch dir bis hierher vielen Dank.
બાય
Hallo,
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});
> >
> > Wie nennt man diese Schreibweise einer Funktion?
>
> Immediately Invoked Function Expression (IIFE), hier die jQuery-Notation davon.
Das ist keine Immediately-Invoked Function, was man daran erkennt, dass sie nicht immediately invoked wird. ;) Dazu fehlt der Call-Operator.
> > Was ist der Unterschied zwischen
> >
> > `function whatever() {}`{:.language-javascript}
> >
> > und
> >
> > `$(function() {});`{:.language-javascript}
>
> ... und der Variante ohne jQuery
>
> `(function() {}) ();`{:.language-javascript}
>
> Beispiel 1 definiert eine Funktion mit einem Namen, die durch Angabe ihres Namens und eines Klammernpaares (ggf. mit Parameterliste) bei Bedarf aufgerufen wird. Beispiel 2 und 3 definieren eine anonyme (namenlose) Funktion, die im jQuery-Fall wegen des umschließenden $(), im anderen Fall durch die angehängten Funktionsklammern sofort nach der Deklaration aufgerufen wird.
Das gilt für Beispiel 2, nicht für Beispiel 3.
$(fn) ist äquivalent zu [$(document).ready(fn)](http://api.jquery.com/ready/). Es registriert in neueren Browsern einen Handler für den Event [DOMContentLoaded](https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded) bei document. Da DOMContentLoaded bereits gefeuert worden sein kann, wird mit document.readyState geprüft, ob das DOM bereits zur Verfügung steht.
<http://www.w3.org/TR/html5/dom.html#dom-document-readystate>
<http://www.w3.org/TR/html5/dom.html#current-document-readiness>
Falls ja, wird die übergebene Funktion sofort ausgeführt (um genau zu sein: asynchron bei der nächsten Gelegenheit). Insofern verhält sich der Code ähnlich zu einer IIFE. Das ist ein netter Nebeneffekt. Aber in erster Linie geht es hier darum, Code beim »DOM-ready« auszuführen.
Siehe auch
<https://github.com/jquery/jquery/blob/master/src/core/ready.js>
Mathias
--
[Chaplin.js - JavaScript application architecture](http://chaplinjs.org/)
Meine Herren!
Was ist der Unterschied zwischen
function whatever() {}
und
$(function() {});
Ich drösel das mal noch weiter auf:
a();
function a(){
console.log('a invoked');
}
b();
(function b(){
console.log('b invoked');
})
Augenscheinlich sehr ähnlich, aber der Teufel liegt im Detail.
Das erste Skript schreibt, wie erwartet, 'a invoked' auf die Konsole.
Das zweite Skript wirft einen Fehler: 'Uncaught ReferenceError: b is not defined'
Obwohl die Skripte sich mehr als ähnlich sehen haben wir es hier mit zwei grundsätzlich verschiedenen Konstrukten zu tun. a ist ein „function statement“, b dagegen ein „function expression“, genauer ist b sogar ein „named function expression“.
Es existieren noch weitere statements und expressions in JavaScript. if
, for
, while
, switch
, var
sind alles statements. 42
, 'foo'
, 1337 + 1337
, document.write()
dagegen sind expressions. Als Faustregel kann man sich merken, dass alles was einen Wert produziert ein Expression ist.
function-statements und function-expressions verfügen beide über den Zweck wiederverwendbare Code-Einheiten zu schaffen. Der Unterschied ist nun folgender: function-statements werden vom JavaScript parser sozusagen vor eingelesen und können deshalb auch schon aufgerufen werden, bevor sie im Quellcode definiert sind. Wie unser Test gezeigt hat geht das mit einem function-expression nicht. Tatsächlich haben wir bei unserem Beispiel auch nach dem function-expression nicht die Möglichkeit die Funktion aufzurufen, was uns natürlich zu der Frage bringt wozu man function-expression überhaupt braucht. Nun ja, wir können die expression-Variante zum Beispiel nutzen, um Methoden auf einem Objekt zu definieren:
foo.bar = function(){
console.log('foo.bar invoked');
};
Oder wir können anonyme Funktionen definieren und sie als Callback-Funkktion an andere Funktionen übergeben:
[1,2,3].reduce( function( previsous, next){
return previous + next;
},0);
Hier zeigt sich eine weitere Besonderheit der function-expressions: Sie müssen im Gegensatz zu statements keinen Namen haben. Müssen nicht, dürfen aber, das ist zum Beispiel nützlich, wenn eine Funktion sich rekursiv selbst aufrufen können soll.
Funktionen sind bis dato auch die einzige Möglichkeit einen neuen Gültigkeitsberecih (scope) für Variablen zu schaffen, deshalb benutzt man häufig einen function expression und ruft die Funktion sofort auf (sogenannter Immediately invoked function expression [IIFE]):
(function (){
var local = 'foo';
// ...
})();
Die runden Klammern um function(){} teilen dem JavaScript-Interpreter mit, dass es sich hier um einen function-expression und nicht -statment handelt. Die folgenden Klammern () rufen die Funktion dann einfach nur noch auf.
Wie du an anderer Stelle im Thread schon richtig erkannt hast, möchte man aber auch häufig auch mit dem Wert eines Funktions-Aufrufs weiterrechnen, was auch nicht weiter schwierig ist:
var five = (function(){ return 5;})();
var sumOfOneAndTwo = (function(a){ return 1 + a; })(2);
// Besonders cool: Funktionen können Funktionen zurückgeben:
var addFive = (function(){
return function ( a ) {
return a + 5;
};
});
var seven = addFive( 2 );
Sogenannte Modul-Loader machen erheblichen Gebrauch von dieser Technik.
Und nun zurück zu deinem eigentlichen Problem:
$(function(){
});
Hier wird also eine anonyme Funktion an die jQuery-Funktion übergeben. jQuery nimmt die Funktion und führt sie automatisch aus, wenn das load-Event der Seite eintritt, es ist also nur eine andere schreibweise für:
$(document).ready( function() {
});
// oder auch mit einem statement
$(document).ready( readyCallback );
function readyCallback(){
}
Meine Herren!
// Besonders cool: Funktionen können Funktionen zurückgeben:
var addFive = (function(){
return function ( a ) {
return a + 5;
};
})(); // Hier hatte ich die aufrufenden Klammern vergessen
var seven = addFive( 2 );
હેલો
Danke erstmal für die Ausführliche Antwort.
b dagegen ein „function expression“, genauer ist b sogar ein „named function expression“.
b(); scheint ja immer undefined, auch wenn ich es nach der Funktion aufrufe, also
(function b(){
console.log('b invoked');
})
b();
An sich ja ok, aber wie kann ich diese Anonyme Funktion dann Rekursiv aufrufen, wenn ich sie nicht über den Namen ansprechen kann?
Der Sinn ist soweit denke ich klar. Das ich den Wert einer Variable direkt mit einer Anonymen Funktion bearbeiten kann, kannte ich von PHP. Nur welchen Sinn macht es, einer Anonymen Funktion einen Namen zu geben?
Als Faustregel kann man sich merken, dass alles was einen Wert produziert ein Expression ist.
Das ist leicht :)
foo.bar = function(){
console.log('foo.bar invoked');
};
Fehlen hier Klammern, oder schreibt man das in diesem Fall tatsächlich so?
> ~~~javascript
[1,2,3].reduce( function( previsous, next){
> return previous + next;
> },0);
WZT? Was ist „[1,2,3].reduce()“? Wofür stehen die Werte in den Eckigen klammern?
Hier zeigt sich eine weitere Besonderheit der function-expressions: Sie müssen im Gegensatz zu statements keinen Namen haben. Müssen nicht, dürfen aber, das ist zum Beispiel nützlich, wenn eine Funktion sich rekursiv selbst aufrufen können soll.
Wie kann ich denn eine Anonyme Funktion Rekursiv aufrufen? Die Funktion ist ja selbst mit einem Namen immer undefined?
var five = (function(){ return 5;})();
var sumOfOneAndTwo = (function(a){ return 1 + a; })(2);
// Besonders cool: Funktionen können Funktionen zurückgeben:
var addFive = (function(){
return function ( a ) {
return a + 5;
};
});
var seven = addFive( 2 );
Das muss ich noch verinnerlichen, gerade mit Callback-Funktionen habe ich noch enorme schwierigkeiten. Kannst du vielleicht mit einfachen Worten erklären, welchen Sinn genau Callback-Funktionen haben?
Ich denke, dass ich Callbacks zwar nutze, [nur völlig verkehrt](http://fbuch.e-ypsilon.net/fahrtenbuch.js). Bzw. wo eig. Callbacks Sinnvoll wären, mache ich abfragen nach anderen dingen, um die eigentliche Callback-Funktion zu starten.
~~~javascript
$(function(){
>
> });
es ist also nur eine andere schreibweise für:
$(document).ready( function() {
});
Das ist gut zu wissen. Dann kann mich endlich dieses lästigen document.ready entledigen. War mir schon lange ein Dorn im Auge :)
બાય
--
.
..:
Meine Herren!
હેલો
Danke erstmal für die Ausführliche Antwort.
b dagegen ein „function expression“, genauer ist b sogar ein „named function expression“.
b(); scheint ja immer undefined, auch wenn ich es nach der Funktion aufrufe
An sich ja ok, aber wie kann ich diese Anonyme Funktion dann Rekursiv aufrufen, wenn ich sie nicht über den Namen ansprechen kann?
Rekursiv bedeutet ja, dass sich die Funktion selbst wieder aufruft. In diesem Beispiel ist „b“ weder vor der Funktions-Definition noch danach ein gültiger Bezeichner für die Funktion, aber _innerhalb_ der Funktion ließe sich der Bezeicher wiederverwenden:
// !!! ACHTUNG !!! Endlos-Rekursion! Besser nicht ausführen.
(functin b(){
b(); // rekursiver Aufruf
});
Wenn man außerhalb der Funktion eine Referenz darauf benötigt, weisen speichern wir eine Referenz der Funktion in einer Variablen.
var a = function b(){
};
a();
Der Sinn ist soweit denke ich klar. Das ich den Wert einer Variable direkt mit einer Anonymen Funktion bearbeiten kann, kannte ich von PHP. Nur welchen Sinn macht es, einer Anonymen Funktion einen Namen zu geben?
Wie gesagt, die Funktion kennt ihren eigenen Namen und weiß daher, wie sie sich selbst aufrufen kann.
foo.bar = function(){
console.log('foo.bar invoked');
};
> Fehlen hier Klammern, oder schreibt man das in diesem Fall tatsächlich so?
Du meinst diese Klammern?
~~~javascript
foo.bar = (function(){
console.log('foo.bar invoked');
});
Gut beobachtet. Aber in diesem Fall können wir die umschließenden Klammern tatsächlich einfach weglassen. JavaScript-Interpreter entscheiden anhand des Kontextes, ob es sich um einen function-expression oder -statement handelt. Mit den umschließenden Klammern teilen wir dem Interpreter ausdrücklich mit "jetzt kann nur ein expression" kommen. Der Zuweisungs-Operator macht das gleiche, auf der rechten Seite darf nur ein expression stehen. Es besteht für den Interpreter also keine Verwechslungs-Gefahr.
[1,2,3].reduce( function( previsous, next){
return previous + next;
},0);
>
> WZT? Was ist „[1,2,3].reduce()“? Wofür stehen die Werte in den Eckigen klammern?
Okay das war ziemlich viel Voodoo.
Mit den eckigen Klammern erzeugen wir ein Array, das ist die Literal-Schreibweise, die auch in JSON übernommen wurde. [1,2,3] erzeugt folglich ein Array mit den Einträgen 1, 2 und 3.
In JavaScript sind Arrays standardmäßig Objekte und können deshalb Methoden haben. mit .reduce rufen also nur eine Methode des Arrays auf.
`[1,2,3].reduce( callback )`{:.language-javascript} ist das ungefähre JavaScript Pendant zu dem PHP-Code:
`array_reduce( array(1,2,3), 'callback' );`{:.language-php}
Die reduce-Funktion wird benutzt, um ein Array auf einen neuen Wert abzubilden. Das Beispiel summiert einfach alle Einträge auf. Das Ergebnis ist also 6 ( 1 + 2 + 3 ).
> Das muss ich noch verinnerlichen, gerade mit Callback-Funktionen habe ich noch enorme schwierigkeiten. Kannst du vielleicht mit einfachen Worten erklären, welchen Sinn genau Callback-Funktionen haben?
Mit Callback-Funktionen bezweckt man eine Umkehrung der Verantwortlichkeit (im Englischen: reverse of control, klingt sehr viel schöner). Wenn wir zum Beispiel einen Button haben und eine Funktion ausführen wollen, wenn dieser geklickt wird, dann gibt es im Wesentlichen zwei Methoden das umzusetzen:
1) Wir pullen den Zustand des Buttons. D.h. wir fragen kontinuirlich den Zustand des Buttons ab und führen unsere Funktion aus, wenn dieser geklickt wurde.
2) oder wir sagen dem Button "du weißt doch am besten, wenn du geklickt wurdest, also nimm doch bitte diese Funktion und führe sie dann aus". Wir übergeben sozusagen die Kontrolle an den Button.
Im Web benutzt man ausschließlich die zweite Variante. Auf hardwarenahe Ebene, zum Beispiel bei Mikrocontrollern findet man auch häufig die erste Variante.
In dem Beispiel hab ich es mir einfach gemacht und ein Szenario gewählt, das intuitiv irgendwie asynchron abläuft. Aber man nutzt Callbacks auch in synchronen Szenarion, wie das array.reduce-Beispiel hoffentlich illustriert hat.
> ~~~javascript
$(function(){
> >
> > });
es ist also nur eine andere schreibweise für:
$(document).ready( function() {
});
> Das ist gut zu wissen. Dann kann mich endlich dieses lästigen document.ready entledigen. War mir schon lange ein Dorn im Auge :)
Das ist Geschmackssache und sollte nicht unbedingt gemacht werden, nur weil es geht. Die Schreibweise, die du bisher benutzt hast, ist deutlich aussdruckssärker. Ein Programmierer, der diese Variante liest, weiß sofort was Sache ist, die Kurzschreibweise dagegen sagt wenig darüber aus, was tatsächlich passert. Deswegen musstest du ja auch nachfragen ;)
--
“All right, then, I'll go to hell.” – Huck Finn
હેલો
In diesem Beispiel ist „b“ weder vor der Funktions-Definition noch danach ein gültiger Bezeichner für die Funktion, aber _innerhalb_ der Funktion ließe sich der Bezeicher wiederverwenden:
Das macht Sinn.
Wenn wir zum Beispiel einen Button haben und eine Funktion ausführen wollen, wenn dieser geklickt wird, dann gibt es im Wesentlichen zwei Methoden das umzusetzen:
- oder wir sagen dem Button "du weißt doch am besten, wenn du geklickt wurdest, also nimm doch bitte diese Funktion und führe sie dann aus". Wir übergeben sozusagen die Kontrolle an den Button.
Die erste Variante ist klar, wie aber sieht diese hier aus? Wie übergibt man einem Button die „Kontrolle“?
Im Web benutzt man ausschließlich die zweite Variante.
Na super, ich reagiere ausschliesslich auf Events wie on.click oder on.submit. Wie sieht die zweite Variante aus?
Ein Programmierer, der diese Variante liest, weiß sofort was Sache ist, die Kurzschreibweise dagegen sagt wenig darüber aus, was tatsächlich passert. Deswegen musstest du ja auch nachfragen ;)
Das stimmt auch wieder.
બાય
Meine Herren!
Na super, ich reagiere ausschliesslich auf Events wie on.click oder on.submit. Wie sieht die zweite Variante aus?
Keine Sorge du machst das richtig. Du benutzt Callbacks vermutlich täglich, nur jetzt geben wir dem Tier mal einen Namen.
$('#button').click( function(){
console.log('button clicked');
});
Das ist jQuery-Variante, um einen Event-Handler beim Klick-Event zu registrieren. Beachte: click() ist ein Funktionsaufruf und wir übergeben der Funktion eine weitere anonyme Funktion als Parameter.
Die erste Variante dagegen würde so aussehen (Psuedo):
// Solange den Zustand des Buttons abfragen, bis er positiv wird
while ( button.istNichtGedrückt ) {
// Nichts machen, sondern einfach nur warten
}
// hier kommen wir erst hin, wenn der Button gedrückt wurde
buttonWurdeGedrückt();
Im Web-Design existiert diese Variante nicht, weil es technisch einfach nicht möglich ist. Der Event-Loop von JavaScript sorgt dafür, dass keine Benutzer-Eingaben entgegen genommen werden können, solange wir in der while-Schleife festhängen, und damit ergibt sich dann eine Endlos-Schleife.
હેલો
Na super ...
Keine Sorge du machst das richtig.
Na gut, dann bin ich beruhigt :)
$('#button').click( function(){
console.log('button clicked');
});Das ist jQuery-Variante, um einen Event-Handler beim Klick-Event zu registrieren. Beachte: click() ist ein Funktionsaufruf und wir übergeben der Funktion eine weitere anonyme Funktion als Parameter.
Ja, jetzt, wo du es schreibst. Ich hab mir tatsächlich nie Gedanken über diese Funktionsaufrufe gemacht. JQuery macht es einfach zu einfach, als das man sich da noch einen Kopf drum machen müsste.
Das sieht ja so ziemlich wie dein reduce-Bsp. aus, nur ohne Array als -- wie nennt man das, was vor dem Funktionsnammen steht? $('das_hier').reduce()
?
Die erste Variante dagegen würde so aussehen (Psuedo):
// Solange den Zustand des Buttons abfragen, bis er positiv wird
while ( button.istNichtGedrückt ) {
// Nichts machen, sondern einfach nur warten
}
// hier kommen wir erst hin, wenn der Button gedrückt wurde
buttonWurdeGedrückt();
Das ist wirklich eine Katastrophe. Kann es sein, dass früher so gescriptet wurde? Das man die überwachung von Elementen tatsächlich in Schleifen realisiert hatte?
> Der Event-Loop von JavaScript sorgt dafür, dass keine Benutzer-Eingaben entgegen genommen werden können, solange wir in der while-Schleife festhängen, und damit ergibt sich dann eine Endlos-Schleife.
Abgesehen vom Overhead, der da produziert werden würde, wenn man viel zu überwachen hat.
બાય
--
.
..:
Meine Herren!
Das sieht ja so ziemlich wie dein reduce-Bsp. aus, nur ohne Array als -- wie nennt man das, was vor dem Funktionsnammen steht?
$('das_hier').reduce()
?
Wenn Funktionsaufrufe mit einem Punkt irgendwo anknüpfen spricht man von Methoden-Aufrufen. Das Vieh vor dem Punkt nennt man gemeinhin einfach Objekt oder auch häufig Objekt-Instanz. Im Falle von jQuery kann man auch jQuery-Objekt sagen.
Das ist wirklich eine Katastrophe. Kann es sein, dass früher so gescriptet wurde? Das man die überwachung von Elementen tatsächlich in Schleifen realisiert hatte?
Das wurde und wird in vielen Bereichen so gemacht. Teilweise ist das schlechtes Design, aber teilweise ist es auch eine technische Notwendigkeit. Etwa auf einem Mikrocontroller, wenn dort die Interrupts für Buttons deaktiviert sind, ist das Pullen der Zustände die einzige Möglichkeit auf Eingaben zu reagieren.
હેલો
Das wurde und wird in vielen Bereichen so gemacht. Teilweise ist das schlechtes Design, aber teilweise ist es auch eine technische Notwendigkeit. Etwa auf einem Mikrocontroller, wenn dort die Interrupts für Buttons deaktiviert sind, ist das Pullen der Zustände die einzige Möglichkeit auf Eingaben zu reagieren.
Kann man mit Javascript Mikrocontroller steuern oder überwachen?
બાય
Meine Herren!
Kann man mit Javascript Mikrocontroller steuern oder überwachen?
Mit NodeBots geht das, ja. Aber meine Erfahrungen beruhen hier auf purem C und Assembler.
હેલો
Mit NodeBots geht das, ja.
Das ist ja mal was schönes. Das werde ich mir mal näher ansehen müssen.
Danke dir und Martin für die Hilfreichen Antworten. Ich lass das erstmal sacken, wenn sich folgefragen ergeben, weiss ich, wo Ihr wohnt ;)
બાય
Hallo,
Das ist wirklich eine Katastrophe. Kann es sein, dass früher so gescriptet wurde? Das man die überwachung von Elementen tatsächlich in Schleifen realisiert hatte?
Das wurde und wird in vielen Bereichen so gemacht. Teilweise ist das schlechtes Design, aber teilweise ist es auch eine technische Notwendigkeit. Etwa auf einem Mikrocontroller, wenn dort die Interrupts für Buttons deaktiviert sind, ist das Pullen der Zustände die einzige Möglichkeit auf Eingaben zu reagieren.
du meinst Pollen (zyklisch Abfragen)? ;-)
Ja, das wird in dem Bereich häufig noch so gemacht. Allerdings legt man die Programmstruktur dann gern in einer großen Endlosschleife an, so etwas wie hier in C-Pseudocode skizziert:
while (1)
{ if (isKeyPressed()) // Taste gedrückt?
ProcessKeypad(); // Keypad abfragen, Tastencode speichern
if (isCommReady()) // Zeichen an der Sellerie-Schnittstelle?
ProcessComm(); // Schnittstelle bedienen
if (isTimerElapsed()) // Timer abgelaufen?
DoCyclicJobs(); // zeitabhängige Aufgaben erledigen
DoProcessIO(); // Prozess-Ablaufsteuerung bedienen
UpdateDisplay(); // Display (fals vorhanden) auffrischen
RetriggerWatchdog(); // Hardware-Watchdog beruhigen
}
Wesentich ist, dass jeder dieser Funktionsaufrufe nur kurze Ausführungszeiten hat und auf keinen Fall wartet, sondern den entsprechenden Schritt einfach übergeht (z.B. bei der Tastenabfrage). Dann ist nämlich gewährleistet, dass das System nicht irgendwie "hängenbleibt", sondern in einem Quasi-Multitasking durchläuft; wenn man aufpasst, bleibt das System sogar echtzeitfähig.
Die letzte Anweisung ist sozusagen der Totmann-Schalter: Sollte der Programmablauf durch einen groben Fehler doch mal in einer der Funktionen längere Zeit steckenbleiben, wird der Watchdog-Chip nicht mehr regelmäßig nachgetriggert und löst nach einer angemessenen Gnadenfrist (je nach System ein paar Millisekunden bis einige Sekunden) einen RESET aus.
So long,
Martin
Meine Herren!
du meinst Pollen (zyklisch Abfragen)? ;-)
Genau, ich hab mich irgendwie am Wort "Pullup-Widerstand" aufgehangen ;)
હેલો
while (1)
{ if (isKeyPressed()) // Taste gedrückt?
ProcessKeypad(); // Keypad abfragen, Tastencode speichernif (isCommReady()) // Zeichen an der Sellerie-Schnittstelle?
ProcessComm(); // Schnittstelle bedienenif (isTimerElapsed()) // Timer abgelaufen?
DoCyclicJobs(); // zeitabhängige Aufgaben erledigenDoProcessIO(); // Prozess-Ablaufsteuerung bedienen
UpdateDisplay(); // Display (fals vorhanden) auffrischen
RetriggerWatchdog(); // Hardware-Watchdog beruhigen
}
Auch wenn's nur Pseudo ist, verstehe ich es endlich. Ich verstehe C, korrekt \* :)))
બાય
\* Ok, ich verstehe es nur „quasi“, aber immerhin, quasi ist besser als nasing[sic!] :)
--
.
..:
Hallo,
Auch wenn's nur Pseudo ist, verstehe ich es endlich. Ich verstehe C, korrekt * :)))
ich sag's ja immer wieder: Man kann C durch geschickte Wahl der Bezeichner (Funktions- und Variablennamen) so klar und nachvollziehbar schreiben, dass man es fast wie Klartext lesen kann. Assembler auch, obwohl es da nochmal ein Stückchen schwieriger ist.
* Ok, ich verstehe es nur „quasi“, aber immerhin, quasi ist besser als nasing[sic!] :)
Is'ne Kurzform von Nasi Goreng, oder? *g*
Ciao,
Martin
હેલો
* Ok, ich verstehe es nur „quasi“, aber immerhin, quasi ist besser als nasing[sic!] :)
Is'ne Kurzform von Nasi Goreng, oder? *g*
Eigentlich sollte es heissen: nassing, quasi Sachso-Denglisch für „nichts“, passte aber nicht so schön in den lesefluss. Darum habe ich es einfach komplett falsch geschrieben * :)
બાય
* Ich weiss, beides ist so oder so falsch, aber das war ja nicht die frage.
Hallo,
$(function(){
});
>
> Hier wird also eine anonyme Funktion an die jQuery-Funktion übergeben. jQuery nimmt die Funktion und führt sie automatisch aus, wenn das load-Event der Seite eintritt
Nicht ganz. [DOMContentLoaded](https://forum.selfhtml.org/?t=216536&m=1485105), nicht load.
Das DOMContentLoaded-Ereignis tritt ein, wenn der Parser den HTML-Code fertig ins DOM überführt hat.
Das load-Ereignis tritt ein, wenn zudem sämtliche externen nicht-blockenden Assets geladen sind (Stylesheets, Bilder, Medienelemente, Plugins…).
Für den Zugriff auf das DOM, z.B. für das Registrieren von Event-Handlern, ist in der Regel nur DOMContentLoaded bzw. der DOM-Ready-Status interessant.
Das load-Ereignis würde man nicht über $(document).ready(fn), sondern $(window).load(fn) überwachen. Wobei letzteres den Handler nicht sofort feuert, wenn das dokumentweite load-Ereignis bereits vorher gefeuert hat.
Mathias
--
[Chaplin.js - JavaScript application architecture](http://chaplinjs.org/)
Hallo,
function-statements werden vom JavaScript parser sozusagen vor eingelesen und können deshalb auch schon aufgerufen werden, bevor sie im Quellcode definiert sind.
Ja, »sozusagen«. Als einfache Veranschaulichung ist das in Ordnung.
Als Parser wird bei der Verarbeitung von Programmiersprachen üblicherweise das Modul bezeichnet, das den Quellcode in einen abstrakten Syntaxbaum überführt. Der Parser liest das Programm immer von vorne bis hinten ein. Mit der Ausführung des Programms hat der Parser nichts zu tun, diese operiert auf dem abstrakten Syntaxbaum.
Um zu erklären, was hier intern vorgeht, ist der Begriff des Ausführungskontextes hilfreich.
ECMAScript definiert: »Every invocation of an ECMAScript code function … establishes and enters a new execution context«. Beim Ausführen von Funktionen gelten die Schritte Entering Function Code, darin passiert die Declaration Binding Instantiation. Punkt 5 dort regelt die frühe Verarbeitung von Funktionsdeklarationen: »For each FunctionDeclaration f in code, in source text order do … «: erzeuge ein Binding im aktuellen Scope. Erst danach wird der Funktionskörper samt Expressions ausgeführt.
Das ist das sogenannte Hoisting (Hochziehen) von Funktions- und Variablendeklarationen, was zu dem oben genannten Verhalten führt.
Diese Kenntnisse sind nicht zwingend notwendig, aber letztlich sehr hilfreich beim Verständnis verschiedener zentraler JavaScript-Phänomene, darunter Scopes, Identifier Resolution, lokale Variablen, Closures, this und der Strict-Modus.
Dmitry Soshnikov hat einmal versucht, dieses Wissen kompakt in einem Artikel zusammenzutragen, den ich ins Deutsche übersetzt habe.
Siehe auch:
http://davidshariff.com/blog/what-is-the-execution-context-in-javascript/
Mathias
Meine Herren!
Dmitry Soshnikov hat einmal versucht, dieses Wissen kompakt in einem Artikel zusammenzutragen, den ich ins Deutsche übersetzt habe.
Ich bin dir wieder mal zu Dank verpflichtet. Das ist mit das Beste, was ich in letzter Zeit gelesen habe – ohne Übertreibung der »missing link« in meinem JavaScript-Verständnis. Ich freue mich schon drauf, in den nächsten Tagen die weiterführenden Kapitel durchzulesen :)
Hi there,
Was ist der Unterschied zwischen
function whatever() {}
und
$(function() {});
Das eine ist Javascript, das andere irgendein unnötiger Framework-Quatsch...
(scnr...)
હેલો
Gibt es eig. sowas wie Pagespeed auch für Javascript? Idealerweise als Online-Tool? Sowas in der art?
Ich habe hier das Login deaktiviert, kann ich irgendwie testen, wo ich evtl. Mist gemacht hab?
બાય
Hi,
Dein HTML ist krank.
Attribute haben in schließenden Tags nichts zu suchen.
Und ul darf kein Kind von ul sein (Enkel aber schon).
Und Du verwendest <link ... />, also XML-Schreibweise, schreibst aber <Body> mit großem b.
Warum muß das li überhaupt auf den Klick reagieren? Doch nur, weil das a-Element das li nicht komplett ausfüllt. Das kann man aber beheben (display: block ...)
cu,
Andreas
Das mit dem a das ganze li auszufüllen werde ich mal versuchen nur eine Frage bleibt der Text von dem a dann auch in der Mitte?
Hallo,
Also ich habe ein Problem ...
das ist naheliegend, wenn du hier im Forum ein neues Thema aufmachst, um eine Frage zu stellen.
Aber dann tu den Lesern doch bitte einen Gefallen (um damit indirekt auch dir selbst) und wähle einen aussagekräftigen Titel. Einfach "problem" als Thread-Titel, wie in diesem Fall, gibt dem Leser keinen Anhaltspunkt. Und ohne den sehen manche Forennutzer erst gar keine Veranlassung, den Beitrag überhaupt zu lesen.
Übrigens: Satzzeichen wie Kommas, Punkte oder an passender Stelle mal ein Fragezeichen machen das Geschriebene wesentlich leichter verständlich. Und sind gar nicht teuer, die kann sich wirklich jeder leisten.
So long,
Martin
@@Der Martin:
nuqneH
Übrigens: Satzzeichen […] sind gar nicht teuer, die kann sich wirklich jeder leisten.
Gilt das auch für Anführungszeichen? Und wenn ja, warum leistest du dir keine?
Qapla'
Hi,
Übrigens: Satzzeichen […] sind gar nicht teuer, die kann sich wirklich jeder leisten.
Gilt das auch für Anführungszeichen? Und wenn ja, warum leistest du dir keine?
tu ich - aber ich nehme die simplen, billigen aus dem Baumarkt, nicht die aus der Kunstausstellung.
Unter anderem, weil sie genau das darstellen, was ich auch von Hand schreibe: Zwei Strichlein an der Oberlinie.
Unter anderem, weil sie von sämtlichen Programmierern und vielen Technikern so verwendet werden.
Ciao,
Martin
@@Der Martin:
nuqneH
Gilt das auch für Anführungszeichen? Und wenn ja, warum leistest du dir keine?
tu ich - aber ich nehme die simplen, billigen aus dem Baumarkt
Das tu ich auch. Nur nehme ich die aus dem Regal, nicht die aus der Grabbelkiste.
Unter anderem, weil sie genau das darstellen, was ich auch von Hand schreibe: Zwei Strichlein
an der Oberlinie.
Andere Länder, andere Sitten. Dass die Schwaben kein Deutsch *sprechen* können, war mir klar, aber dass sie auch keins *schreiben* können … ;-)
Unter anderem, weil sie von sämtlichen Programmierern und vielen Technikern so verwendet werden.
Beim Programmieren (auch in HTML und CSS, SCNR) nehmen ich auch " und ' als Begrenzer von Strings, Attributwerten, … Deren Inhalte sind nicht für Technik, sondern für Menschen. Demzufolge bekommen die Anführungszeichen ihr menschliches Antlitz.
Qapla'
Moin,
Andere Länder, andere Sitten. Dass die Schwaben kein Deutsch *sprechen* können, war mir klar, aber dass sie auch keins *schreiben* können … ;-)
Eine Sprache ist doch etwas lebendiges und nicht glasklar determiniert und definiert. Was spricht gegen die Verwendung von " als Anführungszeichen? Im heutigen Deutsch ist das IMHO schon ein De-facto-Standard.
Grüße Marco
@@misterunknown:
nuqneH
Was spricht gegen die Verwendung von " als Anführungszeichen? Im heutigen Deutsch ist das IMHO schon ein De-facto-Standard.
Das mag es zu Zeiten der Schreibmaschine gewesen sein, die nur einen äußerst beschränkten Zeichensatz hatte.
Die Zeiten von ASCII (= Zeiten von Grünmonitoren) sind lange vorbei. Auch wenn die der Schreibmaschine entlehnten Tastaturen (QWERTY/QWERTZ/AWERTY, obwohl der Grund der Verklemmung der Typenhebel nicht mehr existiert) anderes suggerieren: Computer haben einen Zeichensatz, der vernünftige™ Anfürungszeichen (und Gedankenstriche – wo wir schon mal dabei sind) beïnhaltet.
Und wenn man die entsprechenden Tastenkombinationen einmal verinnerlicht hat, sind sie auch leicht einzugeben.
Qapla'
Moin,
Computer haben einen Zeichensatz, der vernünftige™ Anfürungszeichen (und Gedankenstriche – wo wir schon mal dabei sind) beïnhaltet.
Warum sollte es unvernünftig sein ein Zeichen zu nutzen, welches jeder kennt? Ist es nicht vielmehr so, dass viele Leute den Unterschied zwischen Sekundenzeichen und Anführungszeichen gar nicht (mehr) kennen? Genauso wie die Unterschiede und die Verwendung der Geviertstriche?
Grüße Marco
@@misterunknown:
nuqneH
Ist es nicht vielmehr so, dass viele Leute den Unterschied zwischen Sekundenzeichen und Anführungszeichen gar nicht (mehr) kennen? Genauso wie die Unterschiede und die Verwendung der Geviertstriche?
Das ist ja das Traurige. Deshalb müssen die, die den Unterschied noch kennen, den ja immer wieder herausstellen, damit das Wissen nicht gänzlich verlorengeht.
Sekundenzeichen?? " ist es nicht. ″ ist es. (″ in HTML – selten blöde Bezeichnung, müsste eher &second; heißen.)
Qapla'
Om nah hoo pez nyeetz, Gunnar Bittersmann!
Sekundenzeichen?? " ist es nicht. ″ ist es. (″ in HTML – selten blöde Bezeichnung, müsste eher &second; heißen.)
Prime: U+2032 &prime ′
Double Prime: U+2033 &Prime ″
Ja, als HTML-Entity dumm gewählt.
Matthias
@@Matthias Apsel:
nuqneH
Double Prime: U+2033 &Prime ″
Ja, als HTML-Entity dumm gewählt.
Auch als Zeichenname in Unicode.
Qapla'
Moin,
Das ist ja das Traurige. Deshalb müssen die, die den Unterschied noch kennen, den ja immer wieder herausstellen, damit das Wissen nicht gänzlich verlorengeht.
Die Frage ist, ob das Wissen relevant ist. Im Endeffekt sind diese Zeichen nur Hilfsmittel. Die eigentlich falsche Verwendung von " ist ja nicht der Verständigung abträglich.
Sekundenzeichen?? " ist es nicht. ″ ist es. (″ in HTML – selten blöde Bezeichnung, müsste eher &second; heißen.)
Stimmt. Es sieht aber im Endeffekt alles ähnlich aus.
Grüße Marco
@@misterunknown:
nuqneH
Die Frage ist, ob das Wissen relevant ist. Im Endeffekt sind diese Zeichen nur Hilfsmittel. Die eigentlich falsche Verwendung von " ist ja nicht der Verständigung abträglich.
" sieht aus wie hingerotzt. „“ sieht aus wie sich Mühe gegeben. Insofern kann " durchaus der Verständigung abträglich sein.
Qapla'