使用 json 的依赖下拉列表
Dependent dropdown using json
我目前正在开发动态依赖下拉菜单。我想要一个侧边栏,每个下拉列表都取决于它上面的那个,所以你根据你的选择,正确的数据将显示在下一个选择中。它应该是国家 - >年份 - >条款 - >电影。我不知道为什么我的数据不会从 json 文件中检索数据。我是编程新手,所以非常感谢任何帮助。
Json文件(moviessimple.js)格式如下:
{
"term": "2020W",
"Year": 2018,
"link": "https://www.imdb.com/title/tt6342440",
"title": "Funan",
"country": "France"
},
{
"term": "2020W",
"Year": 2017,
"link": "https://www.imdb.com/title/tt6516966",
"title": "And Then They Came for Us",
"country": "United States"
},
{
"term": "2020W",
"Year": 2019,
"link": "https://www.imdb.com/title/tt6751668",
"title": "Parasite",
"country": "South Korea"
},
现在,我的 HTML 文件:
<!DOCTYPE html>
<html>
<head>
<title>Test2</title>
<script src="CountryPoints.js" type="text/javascript"></script>
<script src="moviessimple.js"></script>
</head>
<body>
<br /><br />
<div class="container">
<div>
<select name="country" id="country" class="form-control input-lg">
<option value="">Select country</option>
</select>
<br /><br />
<select name="Year" id="Year" class="form-control input-lg">
<option value="">Select year</option>
</select>
<br /><br />
<select name="title" id="title" class="form-control input-lg">
<option value="">Select movies</option>
</select>
</div>
</div>
<script>
$(document).ready(function(){
load_json_data('country');
function load_json_data(country, Year)
{
var html_code = '';
$.getJSON('moviessimple.js', function(data){
html_code += '<option value="">Select '+country+'</option>';
$.each(data, function(key, value){
if(country == 'country')
{
if(value.Year == '')
{
html_code += '<option value="'+value.country+'">'+value.title+'</option>';
}
}
else
{
if(value.Year == Year)
{
html_code += '<option value="'+value.country+'">'+value.title+'</option>';
}
}
});
$('#'+country).html(html_code);
});
}
$(document).on('change', '#country', function(){
var country_id = $(this).val();
if(country_id != '')
{
load_json_data('Year', country_id);
}
else
{
$('#Year').html('<option value="">Select year</option>');
$('#title').html('<option value="">Select movies</option>');
}
});
$(document).on('change', '#Year', function(){
var Year_id = $(this).val();
if(Year_id != '')
{
load_json_data('title', Year_id);
}
else
{
$('#title').html('<option value="">Select movies</option>');
}
});
});
</script>
</body>
</html>
您只需要从服务器获取一次data
,将其保存到全局变量,然后从其他函数更新下拉列表
var movieData = [];
var html_code = '';
load_json_data('country');
function load_json_data(country, Year) {
/*
// to apply in your page
$.getJSON('moviessimple.js', function (data) {
movieData = data;
$.each(movieData, function (index, value) {
html_code +=
'<option value="' + value.country + '">' + value.country + '</option>';
});
});
// and remove lines block below
*/
movieData = [
{
term: '2020W',
Year: 2018,
link: 'https://www.imdb.com/title/tt6342440',
title: 'Funan',
country: 'France',
},
{
term: '2020W',
Year: 2017,
link: 'https://www.imdb.com/title/tt6516966',
title: 'And Then They Came for Us',
country: 'United States',
},
{
term: '2020W',
Year: 2019,
link: 'https://www.imdb.com/title/tt6751668',
title: 'Parasite',
country: 'South Korea',
},
];
$.each(movieData, function (index, value) {
html_code +=
'<option value="' + value.country + '">' + value.country + '</option>';
});
$('#country').append(html_code);
}
function updateDropdown(country, year, title) {
if (!year) {
html_code = '<option value="">Select year</option>';
$.each(movieData, function (index, value) {
if (value.country == country) {
html_code +=
'<option value="' + value.Year + '">' + value.Year + '</option>';
}
});
// update year dropdown
$('#Year').html(html_code);
$('#title').html('<option value="">Select movies</option>');
} else {
html_code = '<option value="">Select movies</option>';
$.each(movieData, function (index, value) {
if (value.country == country) {
html_code +=
'<option value="' + value.title + '">' + value.title + '</option>';
}
});
// update year dropdown
$('#title').html(html_code);
}
}
$('#country, #Year, #title').on('change', function () {
if (this.id == 'country') {
// reset year and title
$('#Year').prop('selectedIndex', 0);
$('#title').prop('selectedIndex', 0);
}
if (this.id == 'title') {
console.log('The title is: ' + $(this).val());
} else {
var country = $('#country').val();
var year = $('#Year').val();
var title = $('#title').val();
updateDropdown(country, year, title);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div>
<select name="country" id="country" class="form-control input-lg">
<option value="">Select country</option>
</select>
<br /><br />
<select name="Year" id="Year" class="form-control input-lg">
<option value="">Select year</option>
</select>
<br /><br />
<select name="title" id="title" class="form-control input-lg">
<option value="">Select movies</option>
</select>
</div>
</div>
我目前正在开发动态依赖下拉菜单。我想要一个侧边栏,每个下拉列表都取决于它上面的那个,所以你根据你的选择,正确的数据将显示在下一个选择中。它应该是国家 - >年份 - >条款 - >电影。我不知道为什么我的数据不会从 json 文件中检索数据。我是编程新手,所以非常感谢任何帮助。
Json文件(moviessimple.js)格式如下:
{
"term": "2020W",
"Year": 2018,
"link": "https://www.imdb.com/title/tt6342440",
"title": "Funan",
"country": "France"
},
{
"term": "2020W",
"Year": 2017,
"link": "https://www.imdb.com/title/tt6516966",
"title": "And Then They Came for Us",
"country": "United States"
},
{
"term": "2020W",
"Year": 2019,
"link": "https://www.imdb.com/title/tt6751668",
"title": "Parasite",
"country": "South Korea"
},
现在,我的 HTML 文件:
<!DOCTYPE html>
<html>
<head>
<title>Test2</title>
<script src="CountryPoints.js" type="text/javascript"></script>
<script src="moviessimple.js"></script>
</head>
<body>
<br /><br />
<div class="container">
<div>
<select name="country" id="country" class="form-control input-lg">
<option value="">Select country</option>
</select>
<br /><br />
<select name="Year" id="Year" class="form-control input-lg">
<option value="">Select year</option>
</select>
<br /><br />
<select name="title" id="title" class="form-control input-lg">
<option value="">Select movies</option>
</select>
</div>
</div>
<script>
$(document).ready(function(){
load_json_data('country');
function load_json_data(country, Year)
{
var html_code = '';
$.getJSON('moviessimple.js', function(data){
html_code += '<option value="">Select '+country+'</option>';
$.each(data, function(key, value){
if(country == 'country')
{
if(value.Year == '')
{
html_code += '<option value="'+value.country+'">'+value.title+'</option>';
}
}
else
{
if(value.Year == Year)
{
html_code += '<option value="'+value.country+'">'+value.title+'</option>';
}
}
});
$('#'+country).html(html_code);
});
}
$(document).on('change', '#country', function(){
var country_id = $(this).val();
if(country_id != '')
{
load_json_data('Year', country_id);
}
else
{
$('#Year').html('<option value="">Select year</option>');
$('#title').html('<option value="">Select movies</option>');
}
});
$(document).on('change', '#Year', function(){
var Year_id = $(this).val();
if(Year_id != '')
{
load_json_data('title', Year_id);
}
else
{
$('#title').html('<option value="">Select movies</option>');
}
});
});
</script>
</body>
</html>
您只需要从服务器获取一次data
,将其保存到全局变量,然后从其他函数更新下拉列表
var movieData = [];
var html_code = '';
load_json_data('country');
function load_json_data(country, Year) {
/*
// to apply in your page
$.getJSON('moviessimple.js', function (data) {
movieData = data;
$.each(movieData, function (index, value) {
html_code +=
'<option value="' + value.country + '">' + value.country + '</option>';
});
});
// and remove lines block below
*/
movieData = [
{
term: '2020W',
Year: 2018,
link: 'https://www.imdb.com/title/tt6342440',
title: 'Funan',
country: 'France',
},
{
term: '2020W',
Year: 2017,
link: 'https://www.imdb.com/title/tt6516966',
title: 'And Then They Came for Us',
country: 'United States',
},
{
term: '2020W',
Year: 2019,
link: 'https://www.imdb.com/title/tt6751668',
title: 'Parasite',
country: 'South Korea',
},
];
$.each(movieData, function (index, value) {
html_code +=
'<option value="' + value.country + '">' + value.country + '</option>';
});
$('#country').append(html_code);
}
function updateDropdown(country, year, title) {
if (!year) {
html_code = '<option value="">Select year</option>';
$.each(movieData, function (index, value) {
if (value.country == country) {
html_code +=
'<option value="' + value.Year + '">' + value.Year + '</option>';
}
});
// update year dropdown
$('#Year').html(html_code);
$('#title').html('<option value="">Select movies</option>');
} else {
html_code = '<option value="">Select movies</option>';
$.each(movieData, function (index, value) {
if (value.country == country) {
html_code +=
'<option value="' + value.title + '">' + value.title + '</option>';
}
});
// update year dropdown
$('#title').html(html_code);
}
}
$('#country, #Year, #title').on('change', function () {
if (this.id == 'country') {
// reset year and title
$('#Year').prop('selectedIndex', 0);
$('#title').prop('selectedIndex', 0);
}
if (this.id == 'title') {
console.log('The title is: ' + $(this).val());
} else {
var country = $('#country').val();
var year = $('#Year').val();
var title = $('#title').val();
updateDropdown(country, year, title);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div>
<select name="country" id="country" class="form-control input-lg">
<option value="">Select country</option>
</select>
<br /><br />
<select name="Year" id="Year" class="form-control input-lg">
<option value="">Select year</option>
</select>
<br /><br />
<select name="title" id="title" class="form-control input-lg">
<option value="">Select movies</option>
</select>
</div>
</div>