javascript代码的布尔条件不起作用

时间:2015-12-28 01:17:21

标签: javascript jquery coffeescript

我有这个coffeescript代码

greet = ->
  if $('#output').html() is 'Hi' and $('#textName').val() is not ""
    $("#output").append(" how are you #{$('#textName').val()}?")

第二个条件是HTML输入的值。如果我退出第二个条件,脚本可以工作,但是如果我把它(如上面的代码中所示),那么无论如何,脚本都不起作用。

我通过一些警报命令测试了输入的值,并且值已实现,因此问题不是值本身,如果不是关于布尔值或函数如何工作,例如,如果我输入类似“Markus”的输入“并运行此代码

greet = ->
  if $('#output').html() is 'Hi' and $('#textName').val() is not ""
    $("#output").append(" how are you #{$('#textName').val()}?")
  alert $('#textName').val()

警报显示“Markus”,但该功能仍无效,.append无法将文本添加到div。涉及的HTML就是这样的

<body>
<form>
    <fieldset>
        <input placeholder="Put your name" id="textName" type="text">
    </fieldset>
</form>
<div id="parent">
<div id="output" onmouseover="greet()">Hi</div>
</div>
</body>
你能帮帮我吗?提前谢谢。

P.S。:我在编译的javascript中验证了coffeescript代码的正确性。我使用括号来封装两个布尔条件,但也不起作用。

2 个答案:

答案 0 :(得分:1)

a is not b没有按照您的想法行事。如果你看一下JavaScript版本:

if $('#textName').val() is not ""

你会看到

if ($('#textName').val() === !"")

!''只是一种说true的奇怪方式,所以你的条件会最终将字符串(或undefined)与布尔值进行比较,而且永远不会是真的。

is(AKA ==)的反面是isnt(AKA !=); is not是两个运营商,而不是一个。

如果你确定$('#textName').val()总会给你一个字符串,那么你想说:

# ------------------------------------------------------vvvv
if $('#output').html() is 'Hi' and $('#textName').val() isnt ""

或者你可以说:

if $('#output').html() is 'Hi' and $('#textName').val()

因为非空字符串在CoffeeScript中仍然是真实的,就像在JavaScript中一样。

答案 1 :(得分:1)

我认为你的咖啡语法错误。 在CoffeeScript中   is =&gt; ===
  not =&gt; !
$('#textName').val() is not "" =&gt; $('#textName') === !""
所以,你永远不会通过这个条件。因为!"" === true