bind: function() {
(.....)
stepsContainer.delegate('button.next_step', 'click', function () {
if($(this).data('clicked')) {
return false;
} else {
$(this).data('clicked', true);
self.gotoNextStep($(this));
}
});
}
gotoNextStep: function (target) {
var currentStepHTML = $("div[data-step='" + this.currentStep + "']");
currentStepHTML.fadeOut(function () {
$(this).next().fadeIn(function(){
target.data('clicked', false);
});
});
this.currentStep++;
},
<button class="next_step">
<span>Dalej</span>
</button>
Kilka dni temu wrzucilem zapytanie odnosnie formularza krokowego. Oto fragment kodu. Podczas gdy kliknalem 2 razy szybko w przycisk dalej sypał się html, ponieważ kroki mam na zasadzie divów (jeden fadeout drugi fadein). Chciałem uniemożliwić takie zachowanie i umożliwić tylko jeden klik w button, ale tak zeby po zmianie kroku button znowu dzialal (mozna sie cofac w formularzu).
Do sedna. Chcialem przekazac do innej funkcji target, zeby ustawic data-clicked
na false
. W momencie gdy przekaze event, to czasmi gdy klikne na span, to wszystko odbywa sie na spanie, a to mnie nie urządza. Postanowiłem więc przekazać $(this)
, czyli button, na ktory klikamy. Zastanawia mnie czy jest to poprawne rozwiazanie tego problemu, czy powinienem to zrobic inaczej?
Może marudze, ale jakoś mi to $(this)
tam nie pasuje i stad moje pytanie.