2016-09-16 15 views
0

二度目にクリックしたときに、私はjQueryの内のコードを次しているボタンは、バックグラウンドで2回

<script language="javascript"> 
    $(document).ready(function() {    
     $('#btnSaveRole').click(function(){ 
      $('#btnFinalSaveRole').click(function() {     
       var $_Role   = $('#txtRole').val(); 
       var data = { 
        "Role"   : $_Role 
       };  
       $.ajax({ 
        url:   'http://localhost:1234/AdminSystem1/public/SaveRole', 
        method:   "POST", 
        async:   true, 
        data:   JSON.stringify(data), 
        contentType: "application/json; charset=utf-8", 
        success: function (msg) { 
         $("btnSaveRole").unbind('click'); 
         $("btnFinalSaveRole").unbind('click'); 

        }, 
        error: function (jqXHR) { 
         $("btnSaveRole").unbind('click'); 
         $("btnFinalSaveRole").unbind('click'); 
        } 
       }); 
      }); 
     }); 
    }); 

</script> 

問題は、私はもう一度同じボタンbtnSaveRoleをクリックしたときに、それが2回クリックされますでクリックされます。

私は成功で、コードの下に使用することを修正して、コールバック

$("btnSaveRole").unbind('click'); 
$("btnFinalSaveRole").unbind('click'); 

を失敗するために私は何も足りませんか?

+0

を使用していますと自動的にアンバインド.on().one()バージョンの使用方法を示していますか? – Devon

+0

@Devonセレクタは異なります。私が理解するように、ボタン 'save'が最初にバインドされています。クリックすると、「最終保存」ボタンがバインドされます。たとえば、「あなたは本当ですか?」ボタン。 2番目のボタンがクリックされると、AJAXが実行され、その後、両方のボタンはアンバウンドされます。 –

+0

私は[jsfiddle](https://jsfiddle.net/nccd9gqc/)で試して、どれだけボタン1(例えば3倍)をクリックしてボタン2をクリックするかを観察すると、アラートは3倍もポップアップします(ボタン1のクリック数など) –

答えて

1

最初のクリックで、あなたはbtnFinalSaveRoleをクリックしたとき、あなたは2回クリックする必要があります、あなたはもちろん、だからbtnFinalSaveRole

に別のイベントを追加し、btnFinalSaveRoleに セカンドクリックし、イベントを追加します。あなたはbtnSaveRoleを2回クリックしています。

jQuery click()はイベントをオーバーライドせず、リストに追加します。

イベントを別のイベントに追加することは、通常は悪い考えです。良いアイデアは外に縛ることです。 Xが最初にクリックされたことを確認する必要がある場合は、ブール値を作成します。

var clicked = false; 
$("#btnSaveRole").on("click", function(){ 
    clicked = true; 
}); 
$("#btnFinalSaveRole").on("click", function(){ 
    if(clicked) { 
     alert("yahoo"); 
    } 
}); 

他のオプションは、イベントのバインドを解除するのがベストではなく、動作することができます。

$("#btnSaveRole").on("click", function(){ 
    $("#btnFinalSaveRole").off("click.val").on("click.val", function(){ 
     alert("hmmmm"); 
    }); 
}); 
+0

または、彼はちょうど.'click()の代わりに ''クリック() ''を使用することができます – Tibrogargan

+0

@Tibrogargan:例を説明してください。 – Pankaj

+0

@epascarello:あなたのソリューションは正常に動作しています。私はTibrogarganの返答を待っています。私がより良い返答をしなければ、あなたの答えはマークされます。ありがとう。 – Pankaj

1

これを試してください。 (私はそれをテストすることはできませんので、保証はありません)。それはあなたがクリックコールバックの内側をクリックコールバックを持っているか、なぜそれが

<script language="javascript"> 
    $(document).ready(function() {    
     $('#btnSaveRole').on("click", function() { 
      $('#btnFinalSaveRole').one("click", function() {     
       var $_Role   = $('#txtRole').val(); 
       var data = { 
        "Role"   : $_Role 
       };  
       $.ajax({ 
        url:   'http://localhost:1234/AdminSystem1/public/SaveRole', 
        method:   "POST", 
        async:   true, 
        data:   JSON.stringify(data), 
        contentType: "application/json; charset=utf-8", 
       }); 
      }); 
     }); 
    }); 
</script> 
+0

完全に働いています。私の質問)@epascarelloは、他のイベントの中にイベントを追加するのは悪いと言いました。あなたの考えてください。 – Pankaj

+0

イベントが2回追加されるなどの事態につながる可能性があります。 *正常*悪い考えです。完全に正しいです。理にかなった状況がありますが、一般的には正常ではありません – Tibrogargan

+0

upvoted for the solution。 'on'と' one' combimationです。 – Pankaj

関連する問題