variable aus js function verwenden

  • Hallo zusammen,

    ich erstelle nach click auf einen button( eventlistener) mit createelement li elemente in der Funktion get_select. Das funktioniert auch. Ziemlich am Ende rufe ich die die Funktion loadDay auf:


    loadDay(input.parentElement.id,value_select) und versuche in der nächsten Zeile die variable placeHolder_input aufzurufen, die in Loadday erstellt wurde:

    input.setAttribute("placeholder",placeHolder_input);


    Doch dann bekomme ich diese Fehlermeldung, wahrscheinlich, weil die Variable nicht außerhalb von loadday definiert ist. Wie kann kann ich diese Variable außerhalb von Loadday benutzen?

    Vielen Dank schon mal für eure Hilfe.


    function loadDay(id,select_text){
    console.log(id);
    console.log("in");
    const url = 'http://localhost/supertramp/loadDay.php';
    const params = new FormData();
    params.append('post_var1', id);
    params.append('post_var2', select_text);

    fetch('loadDay.php', {
    method: 'post',
    body: params
    }).then(res => {
    outputI.innerHTML= "";
    return res.text();
    }).then(res => {
    console.log(res);
    outputI.innerHTML= res;
    placeHolder_input = res;
    console.log(placeHolder_input)
                                               
                                                


    })
                                            
    }




    function get_select(val) {
    alert(val)
                
    const url = 'http://localhost/supertramp/items_aus_db_laden.php';
                
    const params = new FormData();
    params.append('post_var', val);
                
    fetch('items_aus_db_laden.php', {
    method: 'post',
    body: params
    }).then(res => {
    outputB.innerHTML= "";
    return res.text();
    }).then(res => {
    //console.log(res);
    outputB.innerHTML= res;

    list_stops= outputB.textContent;
    list_stops= JSON.parse(list_stops);
                    
    for(let x = 0;x<list_stops.list_stops.length;x++){
    //console.log(ul_list_element)
    let li = document.createElement('li');
    li.classList.add("ui-state-default");
                   
    //console.log('x')
    //console.log(x)
                    
    let tempNode =
    document.createTextNode(list_stops.list_stops[x]);
    let tempNode_day =
    document.createTextNode(" day: ");
                                        
    let input = document.createElement('input');
    let span = document.createElement('span');
    let label = document.createElement('label');
    let button = document.createElement('button');
    let i = document.createElement('i');
    span.classList.add("ui-icon");
    span.classList.add("ui-icon-arrowthick-2-n-s");
    input.classList.add("input_stop_list");
                                
                                
                                
    li.setAttribute("id", x);
    button.classList.add("btn");
    i.classList.add("fa");
    i.classList.add("fa-trash");
    button.appendChild(i);
    button.addEventListener("click", removeElement);
    label.appendChild(tempNode_day);
    //console.log(li);
    //console.log(ul_list_element);

    li.setAttribute("id", x);
    li.appendChild(span);
    li.appendChild(tempNode);
    li.appendChild(label);
    li.appendChild(input);
    li.appendChild(button);
    li.classList.add("linkList");
    loadDay(input.parentElement.id,value_select)
                                    
    input.setAttribute("placeholder",placeHolder_input);
                                 
    //console.log(input.parentElement.id);

    //input.addEventListener(onkeyup,updateDay(input.parentElement.id,10))
                                   
                                   
    ul_list_element.appendChild(li);
    }
                    
    });
                
    }

  • Häufiges Problem, man müsste eigentlich mal eine FAQ dafür schreiben ...

    Der Grund ist, dass fetch asynchron arbeitet, d. h. die Anfrage wird an den Server geschickt und es dauert einen kleinen Moment bis die Antwort eintrifft. Notierst Du das input.setAttribute("placeholder",placeHolder_input); direkt nach dem Aufruf von loadDay() ist die Antwort noch nicht da und die Variable ist nicht definiert.

    Lösung, indem Du auch diese Anweisung im Callback des fetch notierst: