如何使用带有select onchange的条件语句在javascript函数中返回html代码
Posted
技术标签:
【中文标题】如何使用带有select onchange的条件语句在javascript函数中返回html代码【英文标题】:How to return html code in a javascript function with conditional statements with select onchange 【发布时间】:2021-06-25 14:49:33 【问题描述】:通过选择它必须返回 html 标签的选项
<select onchange="getval(this);">
<option value="none" selected>none</option>
<option value="1">Blood Group</option>
<option value="2">Donor name</option>
</select>
<script>
function getval(sel)
if (sel == 1)
return '<label for="Bloodgroup">Blood Group</label>
<select name="bg" class="form-control" id="exampleFormControlSelect1">
<option value="O+" selected>O+</option>
<option value="O-">O-</option>
<option value="A+">A+</option>
<option value="A-">A-</option>
</select>';
else if (sel == 2)
return ' <label for="name">Name</label>
<input type="text" name = "name" class="form-control" required>';
</script>
我想要通过选择选项来输出 例如:如果选项被选为血型
如果是捐赠者姓名,则为其他
【问题讨论】:
【参考方案1】:您的代码中有几个问题。首先,您传递给getval()
函数的参数是select
元素引用,而不是选择的值,因此if
条件需要从参数中读取value
属性。
此外,您在函数中的return
语句不会单独执行任何操作,因为您从函数返回的值不会执行任何操作。要将字符串中的 HTML 添加到 DOM,您需要调用目标元素的函数或属性以附加内容。在以下示例中,分别使用 querySelector
和 innerHTML
完成:
let content = document.querySelector('#content');
function getval(el)
if (el.value == 1)
content.innerHTML = `<label for="Bloodgroup">Blood Group</label>
<select name="bg" class="form-control" id="exampleFormControlSelect1">
<option value="O+" selected>O+</option>
<option value="O-">O-</option>
<option value="A+">A+</option>
<option value="A-">A-</option>
</select>`;
else if (el.value == 2)
content.innerHTML = `<label for="name">Name</label>
<input type="text" name = "name" class="form-control" required>`;
<select onchange="getval(this);">
<option value="none" selected>none</option>
<option value="1">Blood Group</option>
<option value="2">Donor name</option>
</select>
<div id="content"></div>
但同样值得注意的是,在 onclick
属性中使用内联事件处理程序不再是好的做法。此外,应避免在 JS 中存储 HTML。更现代的解决方案是使用不显眼的事件处理程序,并在页面加载时将所有 HTML 包含在 DOM 中,并简单地切换其可见性。
当您使用 jQuery 标记问题时,这里有一个如何做到这一点的示例:
let content = $('#content');
$('select').on('change', e =>
$('.toggle').hide().filter(`.$e.target.value`).show();
);
.toggle display: none;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
<option value="none" selected>none</option>
<option value="bloodgroup">Blood Group</option>
<option value="donor">Donor name</option>
</select>
<div id="content">
<div class="toggle bloodgroup">
<label for="Bloodgroup">Blood Group</label>
<select name="bg" class="form-control" id="exampleFormControlSelect1">
<option value="O+" selected>O+</option>
<option value="O-">O-</option>
<option value="A+">A+</option>
<option value="A-">A-</option>
</select>
</div>
<div class="toggle donor">
<label for="name">Name</label>
<input type="text" name = "name" class="form-control" required>
</div>
</div>
【讨论】:
以上是关于如何使用带有select onchange的条件语句在javascript函数中返回html代码的主要内容,如果未能解决你的问题,请参考以下文章
Blazor:在使用 @bind 时如何在 <select> 中使用 onchange 事件?
HTML 动态创建select,然后添加onChange,如何添加onChange函数成功啊?
如何正确地将 <select> 添加到带有 jquery 的页面并让更改事件起作用?
如何在 React 中使用带有钩子的 onChange 更新数组元素?