【问题标题】:Correct syntax for IF statementIF 语句的正确语法
【发布时间】:2012-03-16 12:27:09
【问题描述】:

谁能告诉我为什么这个 IF 语句不起作用?我正在使用 jQuery 和 Firebug,但后者没有给我任何有用的信息。

我只是试图在所有字段都完成后显示一个“提交”按钮,并且脚本每隔几秒钟运行一次以检查输入。

我的代码摘录有点像这样:

function checkForm(){
    var userName = $('#name').val();
    var userContent = $('#content').val();
    var userEmail = $('#email').val();

    // The following line shows me that the values for the fields are all getting picked up properly
    $('#report').html("userName: "+userName+"<br />userContent: "+userContent+"<br />userEmail: "+userEmail);

    // But the following line is throwing some kind of error
    if (userName == "" || userContent == "" || userEmail == ""){
        $('#update').slideDown();
    } else {
        $('#update').slideUp();
    }
}

$(document).ready(function(){

    $('#update').hide();
    setInterval('checkForm()' , 2000);

});

还有我的 HTML...

<div id="report"></div>
<form id="submitfact">
  <div id="update">Update Database</div>
  <label><input id="name" name="name" type="text" value="" /><span>Fact submitter's name</span></label>
  <label><input id="email" name="email" type="text" value="" /><span>Fact submitter e-mail address</span></label>
  <label class="content"><span>Fact text</span><br /><textarea id="content" name="content"></textarea></label>
</form>

编辑...

如果人们认为我没有提供错误消息是在浪费时间,我深表歉意——但 Firebug 根本没有给我任何有用的东西——如果是的话,我会在这里发布。我是一个相当有经验的 php 程序员,但对 jQuery 相当陌生,所以我承认我仍然掌握编写语言和调试它的能力。我想发布 Firebug 响应的屏幕截图,但作为新用户,我不被允许......我得到的只是行号列中的“红色错误圆圈/黄色播放三角形”图标(“脚本" tab) 在我上面显示的那一行...除了“脚本”和“控制台”面板之外,没有别的东西可以告诉我在哪里看?

另一个编辑...

好吧,我通过查看 Cristoph 的建议解决了这个问题。它基本上是相同的解决方案,但我没有将其作为函数调用,而是将其“内联”。我不完全确定这两种技术之间的区别是什么,或者这是否只是我遇到的本地问题,但我的新 jQuery 看起来像这样:

$(document).ready(function(){
    $('#submitfact').keyup(function(){
        var userName = $('#name').val();
        var userContent = $('#content').val();
        var userEmail = $('#email').val();

        $('#report').html(userName + "<br />" + userContent + "<br />" +  userEmail);

        if (userName == "" || userContent == "" || userEmail == ""){
            $('#update').slideUp();
        } else {
            $('#update').slideDown();
        }
    });
});

我会看看你的其他 cmets,看看我是否可以简化它,但至少我现在有一个工作基线!谢谢大家的时间:)

【问题讨论】:

  • 它们确实是空字符串,还是null?此外,我会在修改输入时完成此检查,而不是在计时器上。
  • 如果一行抛出错误,你不觉得发布错误是有益的吗?另外,Moo-Juice 是对的,你为什么要在计时器上这样做?!
  • “不起作用”不是问题描述。真是浪费大家的时间。
  • 如果我知道它是什么,我会给你错误 - Firebug 只是挂在那条线上而没有详细说明这个问题......这就是我问你们的原因:) 我会编辑检查 keyup 而不是计时器的代码 - 感谢您的建议。
  • 顺便说一句,Moo-Juice - 我如何检查它们是否为空而不是空字符串?

标签: javascript syntax if-statement


【解决方案1】:

首先,它是真的抛出错误,还是根本不起作用?

根据我对您的代码的理解,您的 if 条件应该是:

if (!userName === "" && !userContent === "" && !userEmail === ""){
    // show
    $('#update').slideDown();
} else {
    // hide
    $('#update').slideUp();
}

第二:用计时器来做这件事是个坏主意。

引入事件处理程序来检查输入值是否发生变化会好得多:

$("input").change(function(){

  // if all inputs are filled, show Button, else hide it

});

附: 深入了解 Javascript:空字符串被认为是“虚假的”,因此 username === "" 可以写成!username。但是请注意,undefinednullfalse0NaN 也被视为“虚假”!这意味着,您无法区分它们。出于这个原因,我更喜欢username === "" (note the === !)

【讨论】:

  • 感谢 Christoph - 在第一个实例中简单地更改我的代码以匹配您的逻辑没有任何区别,但是按照您的第二个建议重写我的代码就可以了。我已经相应地修改了我的原始帖子。谢谢! :)
  • 它是 - 我已经编辑了我的原始帖子以显示正常运行的脚本......不确定是什么造成了差异,TBH - 希望当我在 jQuery 上变得更好时我会弄清楚这一点: )
  • 您应该接受一个答案,向其他用户展示您的问题已经解决。
【解决方案2】:

尝试将您的评估更改为:

if (!userName  || !userContent  || !userEmail){
    $('#update').slideDown();
} else {
    $('#update').slideUp();
}

【讨论】:

  • 你可以通过一点数学进一步简化它:if (!(userName &amp;&amp; userContent &amp;&amp; userEmail)) {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
相关资源
最近更新 更多