我有这个 CoffeeScript 代码
greet = ->
if $('#output').html() is 'Hi' and $('#textName').val() is not ""
$("#output").append(" how are you #{$('#textName').val()}?")
第二个条件是 HTML 输入的值。如果我退出第二个条件,脚本将起作用,但如果我将其放入(如上面的代码所示),则脚本无论如何都不起作用。
我通过一些警报命令测试了输入的值,并且该值已实现,因此如果不是关于 bool 值或函数如何工作的问题,问题不是值本身,例如,如果我在输入中输入类似“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 代码的正确性。我也使用括号来封装两个 bool 条件,但也不起作用。
最佳答案
a is not b
不做你认为它做的事情。如果您查看 JavaScript 版本:
if $('#textName').val() is not ""
你会看到
if ($('#textName').val() === !"")
和 !''
只是表达 true
的一种奇怪方式,因此您的条件最终会将字符串(或 undefined
)与一个 bool 值,这永远不会是真的。
与is
(又名==
)相反的是isnt
(又名!=
); is not
是两个运算符,而不是一个。
如果您确定 $('#textName').val()
始终会为您提供一个字符串,那么您想说:
# ------------------------------------------------------vvvv
if $('#output').html() is 'Hi' and $('#textName').val() isnt ""
或者你可以直接说:
if $('#output').html() is 'Hi' and $('#textName').val()
因为非空字符串在 CoffeeScript 中仍然是真实的,就像在 JavaScript 中一样。
关于javascript - JavaScript 代码上的 bool 条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486615/