2016-05-26 2 views
-2

У меня есть сайт, где я использую элементы AngularJS, такие как md-input-container и md-datepicker.Состояние Javascript всегда ложно

Я написал (с помощью моего учителя) приведенную ниже программу 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». Однако, даже если при соблюдении условия он все еще показывает предупреждение.

+0

Как называется checkValue?отправьте соответствующий код – Rooster

+0

, что невозможно. значения, вероятно, не так, как вы думаете, когда они вызывается. –

+0

@Rooster Trouver Yassin

ответ

0

Эта линия:

var ctrl = this; 

важно. Он сохраняет значение this для последующего использования. В течение времен, когда this может ссылаться на что-то еще, чем на контроллер.

Этот момент, когда вы используете 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>

Несколько заметок о вещах, которые я также подправили:

  • У вас есть зависимость в вашем приложении, которое не требуется для вопрос (что затрудняет помощь другим);
  • Интервал вашего кода делает его очень трудным для чтения или отладки;
  • Вы не знаете, что хотите, с date. Во всяком случае, сравнение Date s или любого предмета Date в Javascript - очень сложно, и если вам нужно сделать много, я рекомендую смотреть в импульсы. Во всяком случае, я упростил код до date, являющийся строкой, потому что ваш вопрос не касался этой части, но я подозреваю, что это вызовет проблемы;
  • В предложении if было много круглых скобок, из-за чего было трудно читать;
  • Всегда предпочитайте === более ==, если это вообще возможно;
  • Предложение: используйте !!ctrl.date, чтобы уточнить значения для фальсификаций вместо !== (или еще: !=) Сравнение с null;
  • Если у вас есть идиома ctrl = this, я больше не рекомендую использовать this даже там, где это безопасно (например, на трех простых свойствах), но вместо этого используйте ctrl., а также, как я показал.

Чтобы сделать демонстрационный очиститель runnable, я установил некоторые значения по умолчанию для значений модели представления и заменил перенаправление на alert.

+0

Хмм .... не то, что в теории вызывать предупреждение никогда не произойдет, из-за синтаксической ошибки? 'undefined не является функцией' или аналогичным –

+0

Вы делаете точку Кевина Б, даже если я набираю что-то еще, кроме требуемых условий, окно предупреждения не появляется. – Yassin

+0

@Jeroen Спасибо, что обратили внимание на мою проблему. Я решил это пару часов назад, но моя связь была сокращена, поэтому я не мог публиковать сообщения. Проблема в том, что значение ctrl.date поддерживалось Mozilla (потому что мой учитель тестировался в браузере Mozilla). Мне пришлось добавить «(центр Европы - heure d'été)», чтобы он мог работать на Chrome. И я думаю, что добавлю условие if для браузера Mozilla. – Yassin

Смежные вопросы