2017-05-15 16 views
0

ifelseステートメントで何らかの問題が発生しているが、なぜそれが動作しているのかわからない。ボタンをクリックすると、ステートメントが実行され、すぐにelseステートメントが実行されます。elseステートメントがifとelseの両方を通過する場合

var s, 
 
    PasswordShowHide = { 
 
    settings: { 
 
     passwordInput: $('#password'), 
 
     showHideButton: $('.password-toggle') 
 
    }, 
 

 
    init: function() { 
 
     s = this.settings; 
 
     this.bindUIActions(); 
 
    }, 
 

 
    bindUIActions: function() { 
 
     s.showHideButton.on("touchend click", function(e) { 
 
     e.preventDefault(); 
 
     // var inputType = s.passwordInput.attr('type'); 
 

 
     // console.log(inputType); 
 
     if (s.passwordInput.attr('type') === "password") { 
 
      s.passwordInput.attr("type", "text"); 
 
      console.log("Changed to text"); 
 
      s.showHideButton.html("Hide"); 
 
     } else { 
 
      s.passwordInput.attr("type", "password"); 
 
      console.log("Changed to password"); 
 
      s.showHideButton.html("Show"); 
 
     } 
 
     }); 
 
    } 
 

 
    }; 
 

 

 
(function() { 
 
    PasswordShowHide.init(); 
 
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label> 
 
    Password 
 
    <button type="button" class="password-toggle">Show</button> 
 
    <input id="password" type="password" name="password" autocomplete="off" required> 
 
</label>

これはあなたのイベントハンドラは、 "touchend" を処理し、 "クリック" のWebPACK

/** 
* First we will load all of this project's JavaScript dependencies which 
* includes Vue and other libraries. It is a great starting point when 
* building robust, powerful web applications using Vue and Laravel. 
*/ 

// Vendor Files 
// ------------------------------ 
// Autocomplete: http://projects.sergiodinislopes.pt/flexdatalist/ 
require('./vendor/jquery.flexdatalist.min'); 

// Components 
// require('./components/disable'); 
require('./components/passwordValidator'); 
require('./components/passwordShowHide'); 
require('./components/select'); 
require('./components/showHide'); 
require('./components/date'); 
require('./components/menuDropdown'); 
+3

まずは_impossible_です。関数が複数回呼び出される可能性が高いので、ここでは_independent_関数出力を2つ探しています。 – CBroe

+0

イベントハンドラ全体が2回実行されることはありますか? 2回クリックしましたか?または、「touchend」と「click」の両方を取得しますか? – Thilo

+1

コードをスニペットに変更し、うまく動作しているようです。あなたの問題はあなたのコードのどこかになければなりません。 – George

答えて

0

のための私のapp.jsです。デバイスタイプに応じて、2回呼び出されます。おそらくここで何が起きるかは、最初の呼び出しでは、入力の属性 "type"をelse節のpasswordに設定し、2番目の呼び出しではif部分に入ります。

0

イベントハンドラが複数回呼び出されたようです。要素へのtouchendイベントとclickイベントの両方を添付しました。あなたがやっているのはinput要素の型を切り替えることだけですから、ifとelseの両方が実行されているように見えます。これを確認するには、デバッガをイベントハンドラに配置します。ハンドラが複数回呼び出されることがわかります。

0

解決済み。私のLaravelのビューのこの特定の照合でapp.jsがHTMLで2回実行されていることがわかりました。

お手数をおかけしていただきありがとうございます。

関連する問題