2016-12-22 5 views
0

Ich benutze vue.js, um einige Knopfklicks zu behandeln und eine Methode auszuführen. So eine Schaltfläche wieJavascript run Funktion nur einmal pro Knopf klicken

<button id="signup-photo-button" v-on:click="photo">{{ photoButton }}</button>

wird diese Methode laufen gerade fein:

photo: function(){ 

    if(vm.photoButton == 'Next, Declare Your Goal') 
    { 
     photoUpload();     
    } else { 
     sliderSignup.unslider('next'); 
    } 

} 

das Problem ist ein Doppelklick kann sliderSignup.unslider('next'); zweimal Überspringen zwei Schlitten laufen, nicht gut. Ich weiß, dass es die jquery Funktion .one() gibt, die Sie auf einen Knopfklick verwenden können, aber ich benutze Vue. Wie kann ich diese Funktion nur einmal oder alle 10 Sekunden ausführen, damit Sie nicht wirklich schnell doppelklicken können? Ich habe viel gesehen und sehe nur die Option von $('#element').one('click' function(){}) über Jquery, die nicht für mich arbeiten.

+0

Suche nach "Entprellung" und Sie werden viele Beispiele finden. Es kann auch einige jQuery-Entprell-Plugins geben. – Barmar

Antwort

0

Nach Vue Event-Modifiers können Sie: .Sobald

aus dem Code ändern:

<button id="signup-photo-button" v-on:click="photo">{{ photoButton }}</button> 

zu:

<button id="signup-photo-button" v-on:click.once="photo">{{ photoButton }}</button> 

Mit Vue Version 1 eine Variable wie in verwenden:

new Vue({ 
 
    el: '#example-2', 
 
    data: { 
 
    isAlreadyClicked: true, 
 
    photoButton: 'button demo' 
 
    }, 
 
    methods: { 
 
    photo: function (event) { 
 
     if (this.isAlreadyClicked) { 
 
     this.isAlreadyClicked = false; 
 
     console.log('do your stuff'); 
 
     } else { 
 
     console.log('already clicked. Do nothing'); 
 
     } 
 
    } 
 
    } 
 
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.28/vue.min.js"></script> 
 

 
<div id="example-2"> 
 
    <button id="signup-photo-button" v-on:click="photo">{{ photoButton }}</button> 
 
</div>

+0

Oh Mann, das wäre perfekt, aber unser System ist auf Vue.js 1 und haben keine Zeit, jetzt zu migrieren. – Packy

+0

@Packy Antwort aktualisiert. Ich hoffe, das könnte dir helfen. – gaetanoM

0

Nach @baao Idee

photo: function(){ 

     if(vm.photoButton == 'Next, Declare Your Goal') 
     { 
      photoUpload();     
     } else { 
      document.getElementById('signup-photo-button').disabled = true; 
      setTimeout(function() { 
       document.getElementById('signup-photo-button').disabled = false; 
    } 
,10000); 
      sliderSignup.unslider('next'); 
     } 
    }