molily: Array.length funktioniert nicht (array.length = undefined)

Beitrag lesen

[code lang=javascript]
$(document).ready(function() {

  			  var $flag = true;  
  			  var $video\_array = new Array();  

Wieso fangen die Namen deiner Variablen mit »$« an? Das ist nicht PHP.

Ich kenne diese Konvention nur, wenn man jQuery-Objekte kennzeichnen will. Diese Variablen sind aber keine jQuery-Objekte.

$("#div1").show("slow", function() {});

Wenn du eine leere Funktion als Callback übergibst, kannst du auch keine Funktion übergeben.

$('#youtube_add').click(function($video_array){

Du notierst hier eine Closure. Sie hat automatisch Zugriff auf die Variable $video_array aus dem Scope der äußeren Funktion. Wenn du sie in dieser Handlerfunktion als Parameter deklarierst, hast du auf die Variable der äußeren Funktion keinen Zugriff mehr.

Wie gesagt bekommen Event-Handler-Funktionen als ersten Parameter das Event-Objekt.

$img.src       = "#";

Diese Zeile kannst du dir vermutlich sparen - welchen Zweck soll sie erfüllen?

$a_index = $video_array.length;
$video_array[$a_index] = new Array();
$video_array[$a_index]['video'] = $video_link;
$video_array[$a_index]['id'] = $img.id;

Du programmierst JavaScript wie PHP. Bitte setze dich einmal mit JavaScript auseinander. Du machst gleich mehrere Sachen hier falsch bzw. könntest vieles verbessern.

1. JavaScript ist objektorientiert.
2. Es gibt in JavaScript <http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays@title=keine assoziativen Arrays>.
3. Arrays sind zwar auch Objekte, aber wenn du nur einen Hash brauchst, dann verwende ein Object.
4. Objects kannst du mit dem Object-Literal { ... } erzeugen, Arrays mit dem Array-Literal [ ... ].
5. Wenn du Elemente an einen Array hängen willst, dann nutzt du die http://de.selfhtml.org/javascript/objekte/array.htm#push@title=push-Methode eines Array-Objekts.
6. Auf die Eigenschaften von Objekten kannst du einfach mit objekt.eigenschaft zugreifen. objekt['eigenschaft'] ist zwar äquivalent, aber unnötig kompliziert.

Kurz gesagt, in JavaScript würde man das so schreiben:

$video_array.push({
   video : $video_link,
   id : $img.id
});

onsubmit = function ($video_array){

Was ist onsubmit? Wohin löst dieser Bezeichner auf? Woher kommt diese Variable?
Wenn du keine solche Variable deklariert hast, wird JavaScript eine globale Eigenschaft window.onsubmit erzeugen.
Beim Absenden eines Formulars wird beim zugehörigen form-Element ein submit-Ereignis erzeugt, aber dieses steigt nicht auf. Du müsstest es also beim
form-Element direkt überwachen, falls du das beabsichtigst.

"$a_index = $video_array.length;" erstellen musste da ich sonst nicht
das Array variable zu seiner Größe befüllen konnte! Woher kommt das?

Du kennst push nicht.

Warum ging $video_array[$video_array.length] = new Array(); nicht?
Warum ist die $video_array.length in der submit funktion undefiniert?

Weil du die Variable in der inneren Funktion neu deklarierst und somit keinen Zugriff auf die gleichnamige Variable in der äußeren Funktion mehr hast.

Mathias