javascript - Onchange 选择选项在另一个选择选项上显示结果
问题描述
我创建了下面的代码来在选择值时执行 onchange 函数。
我希望在选择第一个选择选项时看到第二个选择选项发生变化。
下面是在 onchange 时触发更改为第二个选择选项的第一个选择选项。
<div class="form-group">
<div class="col-sm-3 control-label">
<label for="spacing"><?php echo ('Spacing'); ?><span class="star"> *</span></label>
</div>
<div class="col-sm-7">
<select name="spacing" id="spacing" class="required" onchange="showPagesDiv(this.value);
caltotal(this);">
<option value="Double Spaced">Double Spaced</option>
<option value="Single Spaced">Single Spaced</option>
</select>
</div>
下面是第二个选择选项,由于第一个选择选项的变化而改变
<div class="form-group">
<div class="col-sm-3 control-label">
<label for="no_of_pages1">No of Pages or words<span class="star"> *</span></label>
</div>
<div class="col-sm-7">
<div id="single" style="display: none;">
<select name="no_of_pages1" id="no_of_pages1" onchange="caltotal()">
<?php
$query = $conn->query("SELECT * FROM cww_avid_pages_words");
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
if ($row['idpw'] == $post['no_of_pages']) {
echo '<option selected="selected" id="' . $row['idpw'] . 'nop" value="' . $row['idpw'] . '" title="' . $row['amount_added'] . '"> ' . $row['pages'] . ' Page(s) / ' . $row['words'] . ' Words</option>';
} else{
echo '<option selected="selected" id="' . $row['idpw'] . 'nop" value="' . $row['idpw'] . '" title="' . $row['amount_added'] . '"> ' . $row['pages'] . ' Page(s) / ' . $row['words'] . ' Words</option>';
}
}
?>
</select>
</div>
<div id="double" >
<select name="no_of_pages2" id="no_of_pages2" onchange="caltotal()">
<?php
$query = $conn->query("SELECT * FROM cww_avid_pages_words");
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
if ($row['idpw'] == $post['no_of_pages']) {
echo '<option selected="selected" id="' . $row['idpw'] . 'nop" value="' . $row['idpw'] . '" title="' . $row['amount_added'] . '"> ' . $row['pages'] . ' Page(s) / ' . $row['words'] . ' Words</option>';
} else {
echo '<option selected="selected" id="' . $row['idpw'] . 'nop" value="' . $row['idpw'] . '" title="' . $row['amount_added'] . '"> ' . $row['pages'] . ' Page(s) / ' . $row['words'] . ' Words</option>';
}
}
?>
</select>
</div>
</div>
</div>
javascript来影响更改并且它不起作用
<script type="text/javascript">
function showPagesDiv(val) {
if (val == 'Single Spaced') {
document.getElementById('single').style.display = 'block';
document.getElementById('double').style.display = 'none';
} else if(var == 'Double Spaced') {
document.getElementById('single').style.display = 'none';
document.getElementById('double').style.display = 'block';
}
}
</script>
解决方案
如果您正在查看控制台日志,则很容易找到答案。它会给你一个错误,它正在破坏。不过在此之前,您的 PHP 有几点:
<div class="form-group">
<div class="col-sm-3 control-label">
<!-- THERE IS NO NEED FOR PHP TO WRITE "Spacing" HERE -->
<label for="spacing">Spacing<span class="star"> *</span></label>
</div>
<div class="col-sm-7">
<select name="spacing" id="spacing" class="required" onchange="showPagesDiv(this.value);caltotal(this);">
<option value="Double Spaced">Double Spaced</option>
<option value="Single Spaced">Single Spaced</option>
</select>
</div>
在您的部分块中,将您的业务逻辑放在函数/类中或顶部。您不需要运行数据库两次,因为调用是相同的。此外,您的if
语句产生的输出与else
您的 html 错误或您误解了该脚本的作用相同:
<?php
# Start a string
$stropts = '';
# Call once
$query = $conn->query("SELECT * FROM cww_avid_pages_words");
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
# Perhaps it's the "selected" that you are trying to determine with if/else??
$selected = (!empty($post['no_of_pages']) && ($post['no_of_pages'] == $row['idpw']))? ' selected="selected"' : '';
# Assemble a string
$stropts .= '<option'.$selected.' id="' . $row['idpw'] . 'nop" value="' . $row['idpw'] . '" title="' . $row['amount_added'] . '"> ' . $row['pages'] . ' Page(s) / ' . $row['words'] . ' Words</option>';
}
?>
<div class="form-group">
<div class="col-sm-3 control-label">
<label for="no_of_pages1">No of Pages or words<span class="star"> *</span></label>
</div>
<div class="col-sm-7">
<div id="single" style="display: none;">
<select name="no_of_pages1" id="no_of_pages1" onchange="caltotal()">
<!-- Just echo the string here -->
<?php echo $stropts ?>
</select>
</div>
<div id="double" >
<select name="no_of_pages2" id="no_of_pages2" onchange="caltotal()">
<!-- Just echo the string here -->
<?php echo $stropts ?>
</select>
</div>
</div>
</div>
现在说说你的 JavaScript 不能工作的原因——你的elseif
使用var
而不是val
它出错了。由于你只有两种可能性,你可以只做一个三元:
<script type="text/javascript">
function showPagesDiv(val) {
document.getElementById('single').style.display = (val == 'Single Spaced')? 'block' : 'none';
document.getElementById('double').style.display = (val == 'Single Spaced')? 'none' : 'block';
}
</script>
推荐阅读
- python - 用于从 python 中的 mssql 获取数据的 lambda 表达式
- r - 将数据框列列表转换为有序因子
- microsoft-graph-api - 使用服务主体创建团队
- python - Keras 自定义生成器 TypeError:“NoneType”对象不可调用
- azure-devops - 为每个阶段设置时间限制
- sql - 如何使用 Invantive SQL 将文本转换为数字?
- reactjs - rect+nextjs+uglify:意外令牌:名称(n)+大小限制插件
- android - 如何在 Xamarin Forms 中呈现与 Android 本机控件等效的 UI 控件?
- css - 将 bootstrap 3 中的页脚更改为 Bootstrap 4
- android - Android 单词 TextView 之间的空白