2016-05-26 13 views
-2

私はmd-input-containermd-datepickerのようなAngularJS要素を使用するウェブサイトを持っています。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"); 
    } 
} 
}); 

条件がtrueの場合、ユーザーがボタンをクリックすると、彼は "recherche.html"ページに移動します。ただし、条件が満たされてもアラートが表示されます。

+0

checkValueはどのように呼び出されますか?関連コード – Rooster

+0

を掲載することはできません。値は関数が呼び出されたときの値とは思われません。 –

+0

@Rooster Trouver – Yassin

答えて

0

このライン:

var ctrl = this; 

が重要です。後で使用するためにthisという値を保存します。 thisがコントローラよりも何か、それ以外の場合はを参照している可能性があります。

他の機能の中にthisを使用するとその瞬間があります。その機能の内部では、thisの代わりにctrlを使用してください。あなたがのために必要されていないあなたのアプリで依存関係を持っている

  • :私も微調整しているものに

    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や、DateとJavascriptを比較すると、非常にとなります。多くのことをする必要がある場合は、私はmomentjsを調べることをおすすめします。とにかく、あなたの質問はその部分についてではなかったので、コードをdateに簡略化しましたが、問題が発生する可能性があります。
  • if句の中に大量のカッコがあり、読みにくくなっています。
  • 常に可能な場合は常に===より==を優先します。
  • 提案:で!==(または悪化:!=)の比較の代わりに偽の値を確認するために!!ctrl.dateを使用してください。
  • イディオムがctrl = thisの場合、安全である場所(たとえば3つのプレーンプロパティ)であっても、thisは使用しないことをおすすめしますが、代わりにctrl.を使用してください。

実行可能なデモをより明確にするために、私はビューモデルの値にいくつかのデフォルトを設定し、リダイレクトをalertに置き換えました。

+0

うーん....それは理論的には、アラートが発生しないように起こさない、構文エラーのため? '未定義は関数ではない'等 –

+0

あなたは必要条件以外の何かを入力しても、警告ボックスは表示されませんが、ケビンBを指します。 – Yassin

+0

@Jeroen私の問題に注意を払っていただきありがとうございます。私は数時間前にそれを解決しましたが、私の接続は切れてしまったので、私は投稿できませんでした。問題は、私の先生がMozillaブラウザでテストしたため、ctrl.dateの値がMozillaでサポートされていたことです。私は "(ヨーロッパの中心部 - heure d'été)"を追加しなければならなかったので、Chrome上で動作することができました。そして、私はMozillaブラウザのif条件を追加すると思います。 – Yassin