Hallo,
Was nützen mir hier die 3 Parameter? Die kann ich doch auch "hartcodiert" ins eigentliche Javascript eintragen. Was ich meine ist, sie kommen doch nicht wirklich "dymanisch" dort hinein und werden verarbeitet.
Natürlich sind sie an dieser Stelle hartkodiert, was aber nicht ausschließt, dass die Funktion an anderer Stelle mit anderen Parametern aufgerufen wird. Wenn das nie passiert, sind keine Funktionsparameter nötig.
Für mich ist eine Funktion "ein Gerüst an Code, das immer dasselbe macht, nur eben mit verschiedenen Parametern, die von außerhalb der eigentlichen Funktion kommt".
Ja, genau.
Das ist aber doch hier dann gar nicht gegeben.
Das Beispiel war ja auch rein formal, auf der Ebene lässt sich schwer räsonieren.
Tabelle mit 1000 Einträgen, wovon jeder Eintrag ein onclick Event abfeuern kann.
Klassisches jS: Ich hänge den Onclick-Event an ein hierfür geeignetes Tag und steuere eine Funktion an, hierbei übergebe ich die nötigen Parameter, die dem Eintrag entsprechen.
JQuery: Ich generiere 1000 ".click(function()", sowie 1000 entsprechende IDs innerhalb der Einträge?
Nein, das wäre keine gute Lösung. Der jQuery-Code kann genauso arbeiten wie das klassische JavaScript. jQuery muss eigentlich nie ineffizienter arbeiten, es sei denn aufgrund von Flexibilität in der Implementierung.
Man braucht keine tausend IDs hinzuzufügen, damit jQuery die gewünschten Elemente ansprechen kann, und entsprechend händisch 1000 Klick-Handler zu registrieren. jQuery kann Elemente mit CSS-artigen Selektoren auswählen, z.B.
<table id="tabelle"><tr><td></td>…</tr>…</table>
$('#tabelle td').click(function(event) {
console.log( event.target );
});
Dieser Code reicht aus, um alle td-Elemente mit einem Event-Handler zu versorgen. Das ist allerdings noch immer ineffektiv, da nach wie vor soviele Event-Handler registriert werden müssen, wie es td-Elemente gibt. In dem Fall würde man eher Event Delegation verwenden, also die click-Events zentral beim übergeordneten table-Element überwachen. Das ginge mit jQuery so:
$('#tabelle').on('click', 'td', function(event) {
console.log( event.target );
});
… überwacht alle click-Elemente auf td-Elemente innerhalb von #tabelle. Das funktioniert, weil click-Element aufsteigen (Bubbling).
Mathias