2012-03-16 181 views
-3

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

我只是试图揭示一个“提交”按钮,当所有的领域已经完成,脚本运行每隔几秒钟来检查输入。

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

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响应的屏幕截图,但作为新用户,我不被允许......我所得到的只是行号列中的“红色错误圈/黄色玩三角形”图标(“脚本“选项卡)上面显示的行上......除非您可以告诉我除了”脚本“和”控制台“面板以外还有什么其他东西?

另一个编辑...

好吧,我把它固定,采取一看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(); 
     } 
    }); 
}); 

我会通过你的其他意见一看,看如果我可以简化它,但至少我现在有一个工作基线!感谢您的时间,大家:)

+2

它们确实是空字符串,还是'null'?另外,当输入被修改时,我会完成此检查,而不是在定时器上。 – 2012-03-16 12:29:14

+0

如果某行发生错误,您是否认为发布错误是有益的?另外,Moo果汁是对的,你为什么要这样做一个计时器?! – anothershrubery 2012-03-16 12:29:30

+0

**什么是错误**? – gdoron 2012-03-16 12:31:37

回答

1

首先,是不是真的抛出一个错误,或者是它根本就没有工作?

从我如何理解你的代码,如果你的条件应该是:

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

二:用计时器做,这是一个坏主意。

介绍的事件处理程序检查一次的改变inputValue的好远:

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

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

}); 

附: 对Javascript的深入了解:空字符串被视为“falsy”,因此 username === ""可写为!username。但是请注意,undefined,null,false,0NaN也被认为是“虚假”!这意味着,你无法区分它们。由于这个原因,我更喜欢username === ""note the === !

+0

谢谢Christoph - 简单地改变我的代码来匹配你的逻辑n第一个实例没有什么区别,但是重写我的代码作为你的第二个建议做了诀窍。我已经相应地修改了我原来的职位。谢谢! :) – Doug 2012-03-16 15:17:45

+0

那么它现在工作正常吗? – Christoph 2012-03-16 15:20:45

+0

它是 - 我编辑了我的原始帖子以显示正在运行的脚本...不确定是什么导致了差异,TBH - 希望我能在jQuery变得更好时计算出来:) – Doug 2012-03-16 20:32:52

1

试着改变你的评价是:

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

你可以用一点数学来进一步简化它:'if(!(userName && userContent && userEmail)){' – Blazemonger 2012-03-16 12:39:14