如果其他是咖啡脚本

if else in coffee script

本文关键字:脚本 咖啡 其他 如果      更新时间:2023-09-26

Folks,

我的html中有两个文本框。我想用咖啡脚本来比较他们的价值观。尽管我已经在谷歌上搜索过了,我有点确定我在做预期的事情,但我仍然看到了一种奇怪的行为。

问题是:

比方说,我有两个文本框,id分别为"title"answers"author"。除此之外,我还有一个按钮,onclick可以触发咖啡脚本功能。

我的咖啡脚本函数看起来是:

check_fields = ->
  elem_book_title  = $("#title").val()
  elem_book_author = $("#author").val()
  alert(elem_book_title)
  alert(elem_book_author)
  if not elem_book_title? 
    alert("title is null")
  else if not elem_book_author?
    alert("author is null")
  else
    alert("both are ok")

情况是,如果我只在"标题"文本框中输入一些内容,它会提醒我"作者为空"。正确的但令人惊讶的是,它提醒我"两者都很好"。。预期?或者我错过了什么?

在jQuery中,.val()不会为空字段返回null(select元素除外)。现在,您的咖啡脚本评估为:

if (elem_book_title == null) {
  return alert("title is null");
} else if (elem_book_author == null) {
  return alert("author is null");
} else {
  return alert("both are ok");
}

所以试着去掉的问号

if not elem_book_title
  alert("title is null")
else if not elem_book_author
  alert("author is null")
else
  alert("both are ok")

这将产生我认为您所期望的js(它正在测试像空字符串、0或null这样的错误):

if (!elem_book_title) {
  return alert("title is null");
} else if (!elem_book_author) {
  return alert("author is null");
} else {
  return alert("both are ok");
}

这里有一个关于coffeescript的存在算子(?)工作方式的问题,你可能会发现它提供了信息(谢谢@raina77ow)。

您应该检查"" (blank),因为当文本框中没有输入值时,.val()函数将返回"。

你可以这样做:

check_fields = ->
  elem_book_title  = ""
  elem_book_author = "asdasd"
  if not elem_book_title? or  elem_book_title == "" 
    alert("title is null")
  else if not elem_book_author? or  elem_book_author == "" 
    alert("author is null")
  else
    alert("both are ok")

生成的JS

var check_fields;
check_fields = function() {
  var elem_book_author, elem_book_title;
  elem_book_title = "";
  elem_book_author = "asdasd";
  if ((elem_book_title == null) || elem_book_title === "") {
    return alert("title is null");
  } else if ((elem_book_author == null) || elem_book_author === "") {
    return alert("author is null");
  } else {
    return alert("both are ok");
  }
};

提示:当调试if not else if not els时,我发现在块中使用除非和返回代码更容易

return alert("title is null") unless elem_book_title
return alert("author is null") unless elem_book_author
alert("both are ok")

其产生类似的JS

if (!elem_book_title) {
  return alert("title is null");
}
if (!elem_book_author) {
  return alert("author is null");
}
alert("both are ok");