3 回答

TA贡献1817条经验 获得超14个赞
考虑一下这对给定值做了什么:
$(value).show();
如果值是gradSort
那么你正在做:
$("gradSort").show();
这是一个不正确的选择器。如果您正在寻找,id
那么它#
在开始时会丢失。您可以将其添加到值中:
<option value="#nameSort" selected>Alphabetical</option> <option value="#gradSort">Graduation Date</option>
或者,如果出于其他原因您不想更改值,则可以将其添加到选择器中的字符串中:
$('#' + value).show();
或者:
$(`#${value}`).show();
当它在字母选项上时,它会显示两个列表
听起来它在页面首次加载时显示了两个列表。如果是这种情况,您可以在页面加载时手动调用该函数来设置初始状态:
chooseSort('#nameSort');
或者:
chooseSort('nameSort');
(取决于您上面使用的解决方案)

TA贡献1806条经验 获得超5个赞
该值本身将代表 的实际值option
。因此,如果所选option
值是gradSort
您代码的这一部分
$(value).show();
将被指向
$("gradSort").show();
这不是 DOM 中的任何内容。因为它不是一个有效的选择器(标签),所以要使它工作,你应该#
添加
在您的查询选择器之前
$('#' + value).show();
或之前你的期权价值。
<option value="#nameSort" selected>Alphabetical</option> <option value="#gradSort">Graduation Date</option>
我将使用查询选择器选项,所以它将是这样的:
function chooseSort(value) {
$("#nameSort").hide();
$("#gradSort").hide();
$("#" + value).show();
}
$(document).ready(function() {
chooseSort("nameSort");
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="sortBySelector" onchange="chooseSort(value)" style="display:block;border-color: #e0e0e0;">
<option value="nameSort" selected>Alphabetical</option>
<option value="gradSort">Graduation Date</option>
</select>
<div id="nameSort">nameSort</div>
<div id="gradSort">gradSort</div>

TA贡献1844条经验 获得超8个赞
您需要一个条件来确定哪些将显示,哪些将保持隐藏。有几种不同的方法可以做到这一点,但我会这样做:
<select id="sortBySelector" onchange="chooseSort(value)" style="display:block;border-color: #e0e0e0;">
<option id="nameSort' value="nameSort" selected>Alphabetical</option>
<option id="gradSort value="gradSort">Graduation Date</option>
</select>
function chooseSort(value) {
if (value === 'nameSort'){
$('#' + value).show(); // $("#nameSort").show(); would work
$("#gradSort").hide();
} else{
$('#' + value).show(); // $("#gradSort").show(); would work
$("#nameSort").hide();
}
}
让我知道这个是否奏效!
编辑:本着保持 HTML 相同的精神,我确实必须将 id 添加到每个选项以使其工作。另外,我不得不重做value.show()
添加回答
举报