【问题标题】:Hide div when jquery condition is met does not work满足jquery条件时隐藏div不起作用
【发布时间】:2020-02-19 08:53:39
【问题描述】:

我有以下应该隐藏的 div。

<div class="alert alert-danger alert-dismissible" style="display: none;" id="alertDiv"> <strong>Note!</strong><p>At the moment we cannot accept any players born 05 or earlier beacuse we currently are too many.</p></div>

当用户在文本字段“membership-form-personnumber”中输入数值时,我想用 jquery 检查该值,如果满足函数中的条件,则显示上面的 div,但它不起作用。例如,即使我输入 2007,也不会显示 div。我做错了什么?

$('#membership-form-personumber').on('keyup change', function(c) {

    //initially hide all
    if(this.value.length < 4){
        $('#alertDiv').hide();
    }
    else{

        switch(parseInt(this.value)){

            case 2019: case 2018: case 2017: case 2016: case 2015: $('#alertDiv').show(); break;
            case 2014: case 2013: case 2012: case 2011: case 2010: $('#alertDiv').show(); break;
            case 2009: case 2008: case 2007: $('#alertDiv').show(); break;
        }

    }
});

【问题讨论】:

  • 用户 $( "#membership-form-personumber" ).keyup(function() { 而不是 '$('#membership-form-personumber').on('keyup change', function (c) {'
  • @RaviKumar keyup 和更改是必需的。它们相似,但不同。 keyup 仅不会捕获浏览器自动填充。 change 只有在文本框失去焦点时才会触发。
  • 你的例子对我来说很好。请参阅此jsfiddle.net/L8wrnakm 尝试分解此问题,以便您可以对其进行故障排除。首先,使用调试器查看 2007 年的案例是否最终调用$('#alertDiv.show()。如果是这样,那么您的事件处理程序正在正常工作,并且其他东西正在覆盖警报的显示。可能是其他 CSS。您可以使用 chrome 检查器查看覆盖它的样式。
  • 一旦您擅长分解问题以进行故障排除,您可能最终将不再需要在 Stackoverflow 上提问。
  • 如果我改成 $("#membership-form-personumber").keyup(function(){ 什么都没有发生...

标签: jquery conditional-statements


【解决方案1】:

更新:希望我现在正确理解了这个问题。在下面的代码 sn-p 中添加了一行应该可以解决问题。

default: $('#alertDiv').hide();

在 Firefox 69.0.2 中测试了您的代码,并且可以正常工作。请参阅我在下面复制并粘贴您的代码的测试页。

您是否检查了浏览器的开发者控制台是否存在阻止脚本正常执行的 Javascript 错误?

当您的 Javascript 已经执行并尝试访问尚不存在的 DOM 节点时,您的页面可能尚未完全加载。您是否将真实代码包装在 document.ready 调用中?见https://learn.jquery.com/using-jquery-core/document-ready/

关于一般代码:是否有任何商业原因为什么在这里使用 switch 语句而不是单个 if 语句检查值是否低于或等于 2005?像这样的:

if (parseInt(this.value) < 2005) {
    $('#alertDiv').show();
} else {
    $('#alertDiv').hide();
}

$('#membership-form-personumber').on('keyup change', function (c) {

    //initially hide all
    if (this.value.length < 4) {
        $('#alertDiv').hide();
    }
    else {

        switch (parseInt(this.value)) {

            case 2019: case 2018: case 2017: case 2016: case 2015: $('#alertDiv').show(); break;
            case 2014: case 2013: case 2012: case 2011: case 2010: $('#alertDiv').show(); break;
            case 2009: case 2008: case 2007: $('#alertDiv').show(); break;
            // This line should fix your issue
            default: $('#alertDiv').hide();
        }

    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form>
    <div class="alert alert-danger alert-dismissible" style="display: none;" id="alertDiv"> <strong>Note!</strong>
        <p>At the moment we cannot accept any players born 05 or earlier beacuse we currently are too many.</p>
    </div>
    <input id="membership-form-personumber">
</form>

【讨论】:

  • 我有它,因为我想在特定年份触发它。是的,您提供的代码有效,但如果我输入有效数字,它不会隐藏 div
  • 感谢您的评论。现在我明白你的意思了。将更新我的答案。
  • 我发现它对我不起作用的原因是我使用了自动填充功能,如果有 4 位数字,该功能只会检查数字。我还需要允许用户添加更多数字。所以用户可以添加20080201-1234,我需要验证前四个数字。
猜你喜欢
  • 2023-02-09
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
相关资源
最近更新 更多