我正在开展一个工作列表页面,该页面根据各种过滤器的组合显示结果。当一组过滤器没有结果时,我想要显示“无匹配”消息,我想我只是根据可见性通过p
函数显示/隐藏click
元素职位列表要素。每个职位列表都包含在li.requisition-item
中;我试图以两种不同的方式测试基于其他SO线程的可见性。这就是我到目前为止所做的:
$(".requisition-filter a").on("click", function() {
if ($('.requisition-item').is(":visible").length == 0 || $('.requisition-item').css('display') == 'none' ) {
$('p.no-results').show();
console.log('show alert');
}
else if ( $('.requisition-item').is(":visible").length || $('.requisition-item').css('display') == 'block' ) {
$('p.no-results').hide();
console.log('hide alert');
}
else {
$('p.no-results').hide();
}
});
因此,我有一个类no-results
的段元素应该根据这些条件显示/隐藏,但是脚本的行为不符合预期。当过滤器再次显示列表时,警报将(有时)正确显示,但不会“重新隐藏”。任何想法在这里出了什么问题?
答案 0 :(得分:1)
在附带的解决方案中,我只是通过点击“过滤掉项目”来伪造过滤掉项目。按钮(就像我点击俄罗斯一样)。这将检查是否有任何结果可见,并相应地显示无结果消息。
$("button.filter").click(function() {
$(".item").toggle();
checkResults();
});
function checkResults() {
var $items = $(".item");
if ($items.filter(":visible").length == 0) {
$(".message").show();
} else {
$(".message").hide();
}
}

.message {
display: none;
position: absolute;
width: 100px;
height: 100px;
border: 1px solid black;
left: 250px;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="message">No results!</div>
<button class="filter">Filter out items</button>
<ul>
<li class="item">Item 1</li>
<li class="item">Item 2</li>
</ul>
&#13;