如果在咖啡脚本中

时间:2015-04-06 11:03:31

标签: javascript jquery coffeescript

民间,

我的html中有两个文本框。我想用咖啡脚本比较他们的价值观。虽然我已经开始搜索它了,但我确信我正在做预期的事情,但我仍然看到一种奇怪的行为。

事情是:

可以说,我有两个文本框,其id为“title”和“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")

情况是,如果我只在我的“标题”文本框中输入内容,它应该提醒我“作者为空”。对?但令人惊讶的是,它提醒我“两者都可以”。预计?或者我错过了什么?

3 个答案:

答案 0 :(得分:5)

在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的存在运算符(?)如何工作here的方式存在一个问题,您可以找到信息(感谢@ raina77ow)。

答案 1 :(得分:0)

您应该检查"" (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");
  }
};

答案 2 :(得分:-1)

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

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");
相关问题