JavaScript constructor function returns values as undefined

Egon Adelsberger

I'm trying to make a script that creates an object on submit from form values but on each submit it returns values as undefined .

This is HTML:

<header>
        <input type="text" class="title">
        <input type="text" class="image">
        <textarea class="text"></textarea>
        <button id="submit">+</button>
    </header>
    <main>
        <div class="dashboard"></div>
    </main>

This is my script:

(function(){
    function Post(title, image, text) {
        this.title = title;
        this.image = image;
        this.text = text;
        this.date = new Date();
    }

    var post = new Post();

    function Dashboard() {
        var main = document.querySelector("main");
        var article = document.createElement("div");
        article.classList.add("post");
        var title = document.createElement("h1");
        var image = document.createElement("div");
        image.classList.add("img");
        var text = document.createElement("p");
        var date = document.createElement("p");
        var postTitle = post.title;
        var postImage = post.image;
        var postText = post.text;
        var postDate = post.date;
        title.innerText=postTitle;
        image.style.backgroundImage="url("+postImage+")";
        text.innerText=postText;
        date.innerText=postDate;
        article.appendChild(title);
        article.appendChild(image);
        article.appendChild(text);
        article.appendChild(date);
        main.appendChild(article);
    }

    var submit = document.getElementById("submit");

    submit.addEventListener("click", function(){
        var inputTitle = document.querySelector(".title").value;
        var inputImage = document.querySelector(".image").value;
        var inputText = document.querySelector(".text").value;
        var post = new Post(inputTitle, inputImage, inputText);
        Dashboard();
    });
    
})();
Yury Tarabanko

You are creating a new variable post within the click handler but your Dashboard is using one it captures in closure. You could make your Dashboard function to accept post as an argument.

function Post(title, image, text) {
  this.title = title;
  this.image = image;
  this.text = text;
  this.date = new Date();
}


function Dashboard(post) {
  var main = document.querySelector("main");
  var article = document.createElement("div");
  article.classList.add("post");
  var title = document.createElement("h1");
  var image = document.createElement("div");
  image.classList.add("img");
  var text = document.createElement("p");
  var date = document.createElement("p");
  var postTitle = post.title;
  var postImage = post.image;
  var postText = post.text;
  var postDate = post.date;
  title.innerText = postTitle;
  image.style.backgroundImage = "url(" + postImage + ")";
  text.innerText = postText;
  date.innerText = postDate;
  article.appendChild(title);
  article.appendChild(image);
  article.appendChild(text);
  article.appendChild(date);
  main.appendChild(article);
}

var submit = document.getElementById("submit");

submit.addEventListener("click", function() {
  var inputTitle = document.querySelector(".title").value;
  var inputImage = document.querySelector(".image").value;
  var inputText = document.querySelector(".text").value;
  var post = new Post(inputTitle, inputImage, inputText);
  Dashboard(post);
});
<header>
  <input type="text" class="title">
  <input type="text" class="image">
  <textarea class="text"></textarea>
  <button id="submit">+</button>
</header>
<main>
  <div class="dashboard"></div>
</main>

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Javascript function returns undefined

Javascript function returns undefined?

Recursive function in Javascript returns undefined

Async Javascript function returns undefined

Javascript function works but returns undefined

Javascript function returns undefined, why?

method in constructor returns undefined

Constructor returns undefined in JS

JavaScript Function call returns undefined, why?

Javascript call function dynamically - returns undefined

Why this recursive javascript function returns undefined?

JavaScript: Recursive function with Promise, resolve returns "undefined"

Promise inside the if() function returns undefined in Javascript

Javascript: recursive function returns undefined for existing value

JavaScript typeof function passed as an argument returns undefined

Simple Recursive Javascript Function Returns Undefined

Exporting a function using Javascript returns undefined

Javascript JSON parse function returns undefined

Javascript function returns previous value or undefined

Javascript Function return true/false returns undefined

Function that returns just the constructor

Javascript async function inside jQuery on Change function returns undefined

javascript protractor function returns undefined when called from a cucumber stepdefinition even though console.log()prints correct values

Async function returns undefined even though values are returned

Google sheet custom function returns undefined Values sometimes

Javascript prototype function undefined when constructor call in parentheses

mapStateToProps returns undefined values

Undefined JavaScript Object Constructor

Javascript and PHP ajax call with multiple return values returns undefined