如何将其转换为在用户更改下拉框时触发的回调?
How do I turn this into a callback that triggers when a user changes the dropdown box?
我是 Javascript 的新手,正在尝试制作我的第一个程序。
该程序实质上为用户提供了一系列下拉框,他们的选择将在最后进行整理以形成一个连接的文本字符串。 My original JSFiddle 显示该程序对一个下拉框工作正常,我现在正尝试将其重新编写为一个函数,以便可以对多个不同的下拉框重复此过程。
My NEW JSFiddle 表明我现在已将代码重写为函数,并接受两个参数(categoryOptions - 用于填充选择框的不同数组)和(selector - 实际选择在 HTML 文档中定位)。
// Step 4 - Function which will print the selected value into the content HTML element
// Need helping turning this into a callback for the function above.
// I want this function to run but only when the select box is changed.
function printSelection() {
var finalSelection = selector.value;
console.log(document.getElementById("content").innerHTML = finalSelection);
}
}
populateSelects (progressOptions, progressSelector);
我现在想将用户选择的值打印到页面,并赋值给'finalSelection'。不幸的是它说 'Uncaught ReferenceError: selector is not defined"' 但我不确定如何将他们选择的值传递给它。
我知道我需要将此作为回调执行,它会发生 'on change' 但我不确定如何使用主 populateSelects 函数执行此操作。
感谢任何帮助!
您可以创建一个函数,在其中传递下拉元素并提取其值。
function printSelected(element){
document.getElementById("content").innerHTML = element.value;
}
并将您的 HTML 更改为:
<select id="progressDropdown" onchange="printSelected(this)">
<option>Progress Dropdown</option>
</select>
您可以将此功能与所有其他下拉菜单一起使用。
您可以创建一个函数,然后在 select 的 onchange 上,您可以调用传递 this 作为参数的函数。
this 指向调用该函数的 html 元素。
您可以尝试以下代码段。我还修改了 populateSelects 一点,以便能够在一次调用中创建所有下拉菜单。
// Step 1 - Store Strings to be passed to categoryOptions Parameter
let progressOptions = ["Just testing!", "XX has made excellent progress", "XX has made good progress", "XX has made poor progress"];
// Behaviour Options
let behaviourOptions = ["XX has excellent behaviour", "XX has good behaviour", "XX has poor behaviour"];
// Attendance Options
let attendanceOptions = ["XX has excellent attendance", "XX has good attendance", "XX has poor attendance"];
// Punctuality Options
let punctualityOptions = ["XX has excellent punctuality", "XX has good punctuality", "XX has poor punctuality"];
// Improvement Options
let improvementsOptions = ["XX should carry on as they have", "XX could make some improvements", "XX must improve"];
// Step 2 - Target the ID; objects to be used in the select below.
let dropDownConfig = [{
id: "progressDropdown",
categoryOptions: progressOptions
},
{
id: "behaviourDropdown",
categoryOptions: behaviourOptions
},
{
id: "attendanceDropdown",
categoryOptions: attendanceOptions
},
{
id: "punctualityDropdown",
categoryOptions: punctualityOptions
},
{
id: "improvementsDropdown",
categoryOptions: improvementsOptions
},
]
// Step 3 - For Loop Passing the Values from progressOptions as option elements in HTML
function populateSelects(dropDownConfig) {
for (let di = 0; di < dropDownConfig.length; di++) {
for (let i = 0; i < dropDownConfig[di].categoryOptions.length; i++) {
let opt = dropDownConfig[di].categoryOptions[i];
let el = document.createElement("option");
el.text = opt;
el.value = opt;
document.getElementById(dropDownConfig[di].id).add(el);
}
}
}
// Step 4 - Function which will print the selected value into the content HTML element
// Need helping turning this into a callback for the function above.
// I want this function to run but only when the select box is changed.
function printSelection(e) {
document.getElementById("content").innerHTML+= e.value+' ';
}
populateSelects(dropDownConfig);
<body>
<select id="progressDropdown" onchange="printSelection(this)">
<option>Progress Dropdown</option>
</select>
<select id="behaviourDropdown" onchange="printSelection(this)">
<option>Behaviour Dropdown</option>
</select>
<select id="attendanceDropdown" onchange="printSelection(this)">
<option>Attendance Dropdown</option>
</select>
<select id="punctualityDropdown" onchange="printSelection(this)">
<option>Punctuality Dropdown</option>
</select>
<select id="improvementsDropdown" onchange="printSelection(this)">
<option>Improvements Dropdown</option>
</select>
<div id="content"></div>
</body>
我是 Javascript 的新手,正在尝试制作我的第一个程序。
该程序实质上为用户提供了一系列下拉框,他们的选择将在最后进行整理以形成一个连接的文本字符串。 My original JSFiddle 显示该程序对一个下拉框工作正常,我现在正尝试将其重新编写为一个函数,以便可以对多个不同的下拉框重复此过程。
My NEW JSFiddle 表明我现在已将代码重写为函数,并接受两个参数(categoryOptions - 用于填充选择框的不同数组)和(selector - 实际选择在 HTML 文档中定位)。
// Step 4 - Function which will print the selected value into the content HTML element
// Need helping turning this into a callback for the function above.
// I want this function to run but only when the select box is changed.
function printSelection() {
var finalSelection = selector.value;
console.log(document.getElementById("content").innerHTML = finalSelection);
}
}
populateSelects (progressOptions, progressSelector);
我现在想将用户选择的值打印到页面,并赋值给'finalSelection'。不幸的是它说 'Uncaught ReferenceError: selector is not defined"' 但我不确定如何将他们选择的值传递给它。
我知道我需要将此作为回调执行,它会发生 'on change' 但我不确定如何使用主 populateSelects 函数执行此操作。
感谢任何帮助!
您可以创建一个函数,在其中传递下拉元素并提取其值。
function printSelected(element){
document.getElementById("content").innerHTML = element.value;
}
并将您的 HTML 更改为:
<select id="progressDropdown" onchange="printSelected(this)">
<option>Progress Dropdown</option>
</select>
您可以将此功能与所有其他下拉菜单一起使用。
您可以创建一个函数,然后在 select 的 onchange 上,您可以调用传递 this 作为参数的函数。 this 指向调用该函数的 html 元素。 您可以尝试以下代码段。我还修改了 populateSelects 一点,以便能够在一次调用中创建所有下拉菜单。
// Step 1 - Store Strings to be passed to categoryOptions Parameter
let progressOptions = ["Just testing!", "XX has made excellent progress", "XX has made good progress", "XX has made poor progress"];
// Behaviour Options
let behaviourOptions = ["XX has excellent behaviour", "XX has good behaviour", "XX has poor behaviour"];
// Attendance Options
let attendanceOptions = ["XX has excellent attendance", "XX has good attendance", "XX has poor attendance"];
// Punctuality Options
let punctualityOptions = ["XX has excellent punctuality", "XX has good punctuality", "XX has poor punctuality"];
// Improvement Options
let improvementsOptions = ["XX should carry on as they have", "XX could make some improvements", "XX must improve"];
// Step 2 - Target the ID; objects to be used in the select below.
let dropDownConfig = [{
id: "progressDropdown",
categoryOptions: progressOptions
},
{
id: "behaviourDropdown",
categoryOptions: behaviourOptions
},
{
id: "attendanceDropdown",
categoryOptions: attendanceOptions
},
{
id: "punctualityDropdown",
categoryOptions: punctualityOptions
},
{
id: "improvementsDropdown",
categoryOptions: improvementsOptions
},
]
// Step 3 - For Loop Passing the Values from progressOptions as option elements in HTML
function populateSelects(dropDownConfig) {
for (let di = 0; di < dropDownConfig.length; di++) {
for (let i = 0; i < dropDownConfig[di].categoryOptions.length; i++) {
let opt = dropDownConfig[di].categoryOptions[i];
let el = document.createElement("option");
el.text = opt;
el.value = opt;
document.getElementById(dropDownConfig[di].id).add(el);
}
}
}
// Step 4 - Function which will print the selected value into the content HTML element
// Need helping turning this into a callback for the function above.
// I want this function to run but only when the select box is changed.
function printSelection(e) {
document.getElementById("content").innerHTML+= e.value+' ';
}
populateSelects(dropDownConfig);
<body>
<select id="progressDropdown" onchange="printSelection(this)">
<option>Progress Dropdown</option>
</select>
<select id="behaviourDropdown" onchange="printSelection(this)">
<option>Behaviour Dropdown</option>
</select>
<select id="attendanceDropdown" onchange="printSelection(this)">
<option>Attendance Dropdown</option>
</select>
<select id="punctualityDropdown" onchange="printSelection(this)">
<option>Punctuality Dropdown</option>
</select>
<select id="improvementsDropdown" onchange="printSelection(this)">
<option>Improvements Dropdown</option>
</select>
<div id="content"></div>
</body>