Currently learning javascript, and I am curious on the console data output in Chrome inspect. Whenever I ran the HTML file for the first time, the console always output the first data two times. What could be the cause of it? Is there any significance to such when the JS script is running?
Code:
<html>
<head>
<title>JS Select Exercise</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
</head>
<body>
<div class="container">
<hr/>
<div class="row">
<div class="col-lg-6">
<div class="card">
<div class="card-body">
<select class="form-control" id="select_demo" onchange=onKidChange(this)></select>
<br/>
<h3 id="agevalue"></h3>
</div>
</div>
</div>
</div>
</div>
</body>
<script>
var jsonDataObject = [
{"model": "A", "identifier": 1, "fields": {"name": "Stan", "age": "12"}},
{"model": "B", "identifier": 2, "fields": {"name": "Brett", "age": "14"}}
]
var kidModels = document.getElementById("select_demo")
var kidAge = document.getElementById("agevalue")
var kidTry
function setup(){
for(var a = 0; a < jsonDataObject.length; a++){
var option = document.createElement("option")
option.innerHTML = jsonDataObject[a]["fields"].name
option.value = jsonDataObject[a]["fields"].age
kidModels.options.add(option)
kidAge.innerHTML = kidModels.value
kidTry = kidModels.value
console.log(kidTry)
}
}
function onKidChange(selected){
for(var a=0; a < jsonDataObject.length; a++){
if(selected.value == jsonDataObject[a]["fields"].age){
kidAge.innerHTML = jsonDataObject[a]["fields"].age
kidTry = jsonDataObject[a]["fields"].age
console.log(kidTry)
}
}
}
window.onload = setup
</script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0" crossorigin="anonymous"></script>
</html>
Thanks!
In for loop of setup, default selected value for dropdown is the first element of array. And you are always printing this value to console.
var jsonDataObject = [
{"model": "A", "identifier": 1, "fields": {"name": "Stan", "age": "12"}},
{"model": "B", "identifier": 2, "fields": {"name": "Brett", "age": "14"}}
]
var kidModels = document.getElementById("select_demo")
var kidAge = document.getElementById("agevalue")
var kidTry
function setup(){
for(var a = 0; a < jsonDataObject.length; a++){
var option = document.createElement("option")
option.innerHTML = jsonDataObject[a]["fields"].name
option.value = jsonDataObject[a]["fields"].age
kidModels.options.add(option)
kidAge.innerHTML = kidModels.value
kidTry = kidModels.value
console.log(kidTry,'----')
}
}
function onKidChange(selected){
for(var a=0; a < jsonDataObject.length; a++){
if(selected.value == jsonDataObject[a]["fields"].age){
kidAge.innerHTML = jsonDataObject[a]["fields"].age
kidTry = jsonDataObject[a]["fields"].age
console.log(kidTry,'++++')
}
}
}
window.onload = setup
<html>
<head>
<title>JS Select Exercise</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
</head>
<body>
<div class="container">
<hr/>
<div class="row">
<div class="col-lg-6">
<div class="card">
<div class="card-body">
<select class="form-control" id="select_demo" onchange=onKidChange(this)></select>
<br/>
<h3 id="agevalue"></h3>
</div>
</div>
</div>
</div>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0" crossorigin="anonymous"></script>
</html>