javascript - JavaScript 代码上的 bool 条件不起作用

标签 javascript jquery coffeescript

我有这个 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/

相关文章:

javascript - 动态调整容器大小以适合文本

Java 简单框架与 Coffeescript

javascript - 当使用相同类的每个后续元素也是第一个子元素时,如何使用特定类选择页面上的第一个元素?

javascript - 数组长度不起作用

javascript - 将自定义函数添加到 Bootstrap 提前输入

javascript - 使用 javascript 调整所有 div 大小以克服浏览器对 vh、vm 和 css calc 的支持

javascript - 如何包含基于条件的参数(在 CoffeeScript/JavaScript 中)?

javascript - 监听窗口事件或将对象附加到窗口

javascript - Ajax & PHP - 如何在数据插入弹出新页面后立即触发 window.open

javascript - 在 Angular 6 react 形式的单选按钮的基础上禁用文本区域