Javascript条件总是错误的

时间:2016-05-26 18:18:59

标签: javascript angularjs

我有一个网站,我使用AngularJS元素,例如md-input-containermd-datepicker

我(在老师的帮助下)写了一个如下所示的javascript程序,它让我知道用户是否在输入中键入了正确的信息,并选择了正确的日期。

angular.module('BlankApp', ['ngMaterial'])
.controller

('AppCtrl', function() {
  var ctrl = this;
  this.aller = "";
  this.retour = "";
  this.date;

  this.checkValue = function() {

    if((this.aller.toLowerCase()=="montpellier" &&     this.retour.toLowerCase()=="marseille")
      && (this.date != null && this.date.toString() == "Fri Jun 10 2016 00:00:00 GMT+0200")) {
      document.location.href="recherche.html";
    }
  else
  {
    alert("Veuillez saisir Montpellier et Marseille, et le 10 juin 2016");
  }
}
});

如果条件为真,当用户点击按钮时,它会将他带到“recherche.html”页面。但是,即使条件得到遵守,它仍会显示警报。

1 个答案:

答案 0 :(得分:0)

这一行:

var ctrl = this;

很重要。它会保存this的值以供以后使用。有时候this可能会引用 else 而不是控制器。

那一刻是你在另一个函数中使用this的时候。在该功能中,使用ctrl代替this,你应该好好去。

这是一个完整的演示:



angular.module('BlankApp', [])
  .controller('AppCtrl', function() {
    var ctrl = this;
  
    ctrl.aller = "montpellier";
    ctrl.retour = "marseille";
    ctrl.date = "Fri Jun 10 2016 00:00:00 GMT+0200";

    ctrl.checkValue = function() {
      if (ctrl.aller.toLowerCase() === "montpellier" 
          && ctrl.retour.toLowerCase() === "marseille"
          && !!ctrl.date 
          && ctrl.date.toString() === "Fri Jun 10 2016 00:00:00 GMT+0200") {
        alert('Will do: document.location.href = "recherche.html";');
      } else {
        alert("Veuillez saisir Montpellier et Marseille, et le 10 juin 2016");
      }
    }
  });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script>

<div ng-app="BlankApp">
  <div ng-controller="AppCtrl as ctrl">
    Aller: <input ng-model="ctrl.aller"><br>
    Retour: <input ng-model="ctrl.retour"><br>
    Date: <input ng-model="ctrl.date"><br>
    <button ng-click="ctrl.checkValue()">checkValue</button>
  </div>
</div>
&#13;
&#13;
&#13;

关于我也调整过的事情的几点说明:

  • 您的应用中依赖于问题不需要(这会让其他人更难帮助您);
  • 代码的间距使得阅读或调试非常困难;
  • 您不清楚自己对date的要求。无论如何,在Javascript中比较Date或任何Date内容非常非常棘手,如果你必须做很多事情,我建议你研究一下。无论如何,我已经将代码简化为date作为字符串,因为你的问题不是关于那部分,但我怀疑它会给你带来麻烦;
  • if条款中有很多括号使其难以阅读;
  • 如果可能的话,总是更喜欢===而不是==;
  • 建议:使用!!ctrl.date检查虚假值,而不是!==(或更糟:!=)与null的比较;
  • 当你有ctrl = this成语时,我建议不再使用this,即使它是安全的(例如在三个普通属性上),但在那里使用ctrl.代替正如我所展示的那样。

为了使可运行的演示更清晰,我在视图模型值上设置了一些默认值,并将重定向替换为alert