如何使用 onchange 更改使用 jquery 显示(显示/隐藏)的列表?

Posted

技术标签:

【中文标题】如何使用 onchange 更改使用 jquery 显示(显示/隐藏)的列表?【英文标题】:How do I use onchange to make a changes to which list is shown (show/hide) by using jquery? 【发布时间】:2020-10-07 18:47:49 【问题描述】:

这是我的下拉菜单。

<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>

我有两个&lt;ul&gt; id= "nameSort" 和 "gradSort" 我编写了 jquery 代码,它只显示选定的代码。 我试过这个

<script>
function chooseSort(value) 
    $("#nameSort").hide();
    $("#gradSort").hide();
    $(value).show();


`

但是当它在字母选项上时它会显示两个列表,而当我单击毕业选项时它什么也不显示。我不确定为什么会这样。如果您能提供帮助,请告诉我。谢谢你的时间

【问题讨论】:

您可以发布其余的 html 代码吗?我看到你试过了,但只有一部分出现了。这将有很大帮助! 你想看哪一部分 据我所知hide() 不适用于选项。如果你想隐藏选项,你最好的选择(我不明白你为什么需要它,你将无法再次选择,因为一个选项将被隐藏)是用跨度包装它们并隐藏这些跨度跨度> 【参考方案1】:

考虑这对给定值做了什么:

$(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');

(取决于您上面使用的解决方案)

【讨论】:

【参考方案2】:

值本身将代表option 的实际值。所以如果选择的option值是gradSort这部分你的代码

$(value).show();

将被指向

$("gradSort").show();

不是指 DOM 中的任何东西。因为它不是一个有效的选择器(tag),所以要让它工作,你应该添加#或者

在您的查询选择器之前

$('#' + 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>

【讨论】:

如何确保在打开页面时自动选择 namesort?我尝试了选定的标签,但似乎没有任何反应 @TerriSong 您只需在页面加载时调用您的函数一次。就像这样chooseSort("nameSort");【参考方案3】:

您需要一个条件来确定哪些将显示,哪些将保持隐藏。有几种不同的方法可以做到这一点,但我会这样做:

<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()

【讨论】:

如果你使用 switch,你会如何实现这个? 它适用于第二个标签,但您需要预先选择第一个选项才能使其工作。

以上是关于如何使用 onchange 更改使用 jquery 显示(显示/隐藏)的列表?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery在不使用值的情况下选择更改

JQuery Select2下拉onchange选项文本颜色没有改变

如何从 onchange 事件外部获取 jQuery UI 自动完成值?

在更改第一个 ddl 时使用 jquery ajax 绑定下拉列表

如何使用 jQuery 实现 <input type="text"> 的 onchange?

如何正确地将 <select> 添加到带有 jquery 的页面并让更改事件起作用?