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

Boolean condition on javascript code is not working

本文关键字:条件 不起作用 布尔 代码 javascript      更新时间:2023-09-26

我有这个咖啡脚本代码

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>

你能帮我吗?提前谢谢。

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

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中仍然是truthy,就像在JavaScript中一样。

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