2017-07-13 3 views
-1

Ich bin jetzt für 3 Stunden meinen Kopf gegen die Wand. Ich habe diesen Code:Wie bekomme ich neu erstellt wählen Breite mit JS

function showpctask() { 
    if (window.XMLHttpRequest) { 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    var xmlhttp = new XMLHttpRequest(); 
    } else { 
    // code for IE6, IE5 
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     document.getElementById("pcactivitytask").innerHTML = xmlhttp.responseText; 
    } 
    }; 

    xmlhttp.open("GET","showpctask.php"+,true); 
    xmlhttp.send(); 
} 

, die eine PHP-Datei in einem div (id = pcactivitytask) eröffnet. Die PHP-Datei erstellt ein ‚wählen‘

ich diese Funktion auch hier habe:

function setpctaskwidth() { 
    var maxtaskwidth = 0; 
    $("div .pcactivitytask").each(function(){ 
    c_width = parseInt($(this).width()); 
    if (c_width > maxtaskwidth) { 
     maxtaskwidth = c_width; 
    } 
    }); 

    alert (maxtaskwidth); 
} 

, die mir die maximale Breite aller Elemente mit der Klasse der „pcactivitytask“ zeigen. Ja, die Auswahl, die vom vorherigen Skript erstellt wurde, hat diese Klasse. Wenn ich diese beiden Funktionen anrufe, wird es NICHT die Breite der neu erstellten Auswahl enthalten ..... Ich muss es wieder 'manuall' ausführen. Ich brauche mein Skript, um "onclick" BOTH build die NEW select UND schließen Sie es in die Suche nach der maximalen Breite durch das zweite Skript. Vielen Dank.

+0

Ihr Skript ruft 'setpctaskwidth()' zu früh auf, die 'select.pcactivitytask' ist zu diesem Zeitpunkt nicht geladen. Aus diesem Grund ist die Breite nicht enthalten, die Auswahl ist noch nicht vorhanden. – Thomas

+2

Ihr Aufruf an das php-Backend ist eine asynchrone Aufgabe, Sie müssen also warten, bis sie fertig ist. Es gibt wahrscheinlich eine unzählige Anzahl von Erklärungen dazu, wie es im Grunde das Hauptsache ist, über das man stolpern kann. Aber einfach, in Ihrem Fall, nach der Zeile 'document.getElementById (" pcactivitytask "). InnerHTML = xmlhttp.responseText;' müssen Sie 'setpctaskwidth' auf eine Art auslösen. – Yoshi

Antwort

2

XMLhttprequest arbeitet asynchron, dh es passiert nicht in der Reihenfolge.

, die ist, warum Sie die xmlhttp.onreadystatechange Callback-Funktion haben, dass nur läuft, sobald die Anforderung

beendet ist

Sie nicht angeben, wie Sie diese beiden Funktionen nennen, aber ich würde erwarten, um den Anruf zu setpctaskwidth() innerhalb der onreadystatechange Funktion zu sehen dies wie:

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     document.getElementById("pcactivitytask").innerHTML = xmlhttp.responseText; 
     setpctaskwidth(); 
    } 
}; 

darauf hingewiesen werden, dass, wenn die Antwort Bilder oder andere externe Ressourcen enthält (Schriften etc.), die nicht bereits in der Seite vorhanden sind Sie vielleicht eine andere Größe als die tatsächliche endgültige Größe erhalten (es wird messen die Größe vor dem Laden des Bildes)

+0

Vielen Dank, mein Herr! DANKE DANKE DANKE!!!!!!!!!!!!!!!!!!!!! –

+0

LOL - mein Vergnügen :-) –

Verwandte Themen