0

I have an array of objects in a JSON file. I'd like to input an ID and have N elements populated by one of the N properties of the corresponding object, in order.

(example.json)

{
  "objects": [
    {
      "key1": "obj1 val1",
      "key2": "obj1 val2"
    },
    {
      "key1": "obj2 val1",
      "key2": "obj2 val2"
    }
  ]
}

I first set the ID and worked on populating the dynamic elements:

(populate.js)

$(document).ready(function () {
  var id = 1;
  $.getJSON('example.json', function(example) {
    let data = Object.values(example.objects[id]);
    let elements = document.querySelectorAll('.dynamic-elements');
    elements.forEach((e, i) => {
      e.innerHTML = data[i];
    });
  });
});

(HTML)

<!DOCTYPE html>
<html>
<script src='https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js'></script>

<body>
  <div class='dynamic-element'></div>
  <div class='dynamic-element'></div>
  <script src='populate.js'></script>
</body>

This would write "obj2 val1" on the first element and "obj2 val2" on the second, which is what I want. The problem comes when I tried to do the same thing on form submit. I add a form to .html:

<form>
  <input type='text' name='ID'>
  <input type='submit' value='Submit'>
</form>

And change the first line of populate.js to:

$('form').submit(function () {

I expected the page to be filled by objects[1] whenever I click "Submit", but nothing happens. If I replace the whole script with a simple console.log("debug"), nothing gets printed either. The funny thing is, if I also add alert("debug"), then both the console message and the alert will work. Also, it only seems to work if I place the script call below the form.

I'm a complete newbie to html/javascript. Can someone explain why these happen, and also help me obtain the desired behavior?

Edit: Full code of changed populate.js:

//$(document).ready(function () {
$('form').submit(function () {
    // This section runs, but not without the alert
    console.log("debug");
    alert("debug");

    // This section no longer seems to run
    var id = 1;
    $.getJSON('member-db.json', function(db) {
        let data = Object.values(db.members[id]);
        let elements = document.querySelectorAll('.db-info');
        elements.forEach((e, i) => {
                e.innerHTML = data[i+1];
        });
    });
});
2
  • why do u comment $(document).ready(function () { Commented Mar 19, 2019 at 3:48
  • Just to show what the change is from the original. Commented Mar 19, 2019 at 10:44

1 Answer 1

2

Because when u submit form, this page redirect with method POST. if u want console.log("debug"), u must add e.preventDefault();

$('form').submit(function (e) {
     e.preventDefault();
     console.log("debug");
     ...
});
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.