javascript多个条件不';行不通
我有一个下拉列表,每个选项都有一年和一个月。 我想根据年份或月份或两者对选项进行排序。 因此,我可以显示按年、月、年、月排序的选项,或者显示所有内容。 我有以下事件:javascript多个条件不';行不通,javascript,sorting,drop-down-menu,multiple-conditions,Javascript,Sorting,Drop Down Menu,Multiple Conditions,我有一个下拉列表,每个选项都有一年和一个月。 我想根据年份或月份或两者对选项进行排序。 因此,我可以显示按年、月、年、月排序的选项,或者显示所有内容。 我有以下事件: $('#years,#months').bind('change', function () { y = $('#years').val(); m = $('#months').val(); $('#files > option').each(function
$('#years,#months').bind('change', function () {
y = $('#years').val();
m = $('#months').val();
$('#files > option').each(function () {
$(this).show();
});
$('#files > option').each(function () {
string = $(this).text();
//first situation
if (y == 'All' && m == 'All')
$(this).show();
// second situation
else if ((y == 'All') && string.indexOf(m) == -1)
$(this).hide();
//third situation
else if ( string.indexOf(y) == -1 && m == 'All')
$(this).hide();
// fourth situation
else if (string.indexOf(y) == -1 || string.indexOf(m) == -1)
$(this).hide();
});
});
使用html代码:
<select id='years'>
<option value='All'>All</option>
<option value='2013'>2013</option>
<option value='2012'>2012</option>
</select>
<select id='months'>
<option value='All'>All</option>
<option value='Feb'>Feb</option>
<option value='Jan'>Jan</option>
</select>
<br/>
<br/>
<select id='files' siz='10'>
<option value='0'>sdgsdfsadfsd1-2013-Feb-1212</option>
<option value='1'>fsadfadsfadsfadsf2-2012-Feb-123123</option>
<option value='2'>fsadfadsfadsfadsf3-2012-Jan-123123</option>
<option value='3'>fsadfadsfadsfadsf4-2013-Jan-123123</option>
<option value='4'>fsadfadsfadsfadsf5-2012-Feb-123123</option>
<option value='5'>fsadfadsfadsfadsf6-2013-Feb-123123</option>
<option value='6'>fsadfadsfadsfadsf7-2013-Feb-123123</option>
<option value='7'>fsadfadsfadsfadsf8-2013-Jan-123123</option>
<option value='8'>fsadfadsfadsfadsf9-2012-Jan-123123</option>
<option value='9'>fsadfadsfadsfadsf10-2013-Feb-123123</option>
<option value='10'>fsadfadsfadsfadsf11-2012-Feb-123123</option>
</select>
全部的
2013
2012
全部的
二月
简
sdgsdfsadfsd1-2013-2-1212
FSADFADSFADSF2-2012-2-123123
FSADFADSFADSF3-2012-Jan-123123
FSADFADSFADSF4-2013-Jan-123123
FSADFADSFADSF5-2012-2-123123
FSADFADSFADSF6-2013-2-123123
FSADFADSFADSF7-2013-2-123123
FSADFADSFADSF8-2013-Jan-123123
FSADFADSFADSF9-2012-Jan-123123
FSADFADSFADSF10-2013-Feb-123123
FSADFADSFADSF11-2012-2-123123
第二和第三种情况不起作用!!
它处理两个条件(true&&false),(false&&true),因为它们是相同的值!我不知道为什么!
这里有一个你的逻辑是错误的;最后一个条件在不应该的时候被评估。(例如:如果
y=='All'
并且string.indexOf(m)>=0
)。请尝试以下方法:
$('#files > option').each(function () {
var string = $(this).text();
var show;
if (y == 'All') {
show = m == 'All' || string.indexOf(m) >= 0;
} else if (m == 'All') {
show = string.indexOf(y) >= 0;
} else {
show = string.indexOf(y) >= 0 && string.indexOf(m) >= 0;
}
if (show) $(this).show();
else $(this).hide();
});
请注意,从jQuery 1.7+开始,上的
优先于bind
。然后,更好地解释发生了什么(以及发生了什么!)。使用console.log(expression)
或alert(exp)
来验证条件和调试。无法理解您的上一条评论,您的意思是,即使我在触发事件时分配它,它也会保存它的值谢谢更正我的逻辑。你的正在工作:)这是一个范围问题吗?“你能告诉我怎么才能把它修好吗?”萨利——这只是一个逻辑错误;与范围无关。在代码中,如果以前的条件失败,则会检查每个条件,但如果年份或月份是'All'
,则不希望检查最后一个条件。(第一个条件涵盖了它们都是'All'
的情况,但其中一个是'All'
且另一个有效的情况满足了第四个隐藏条件,因为选项不包含单词'All'
)