javascript - Bir onclick olayında iki fonksiyonu çalıştırmam gerekiyor. İkisini birlikte iç içe koyduğumda bile çalıştıramıyorum
HTML şudur:
<input name="submit"
type="submit"
class="button"
value="Click Here"
tabindex="13"
onclick="return ValidateForm();" />
ValidateForm() fonksiyonu, tüm olağan form doğrulama koduna sahiptir. Diğer fonksiyonu çalıştıramıyorum (tek başına çalışıyor, örneğin)
<input name="submit"
type="submit"
class="button"
value="Click Here"
tabindex="13"
onclick="disDelay(this);" />
Her ikisini de onclick'den sonra koymayı denedim...örnek
<input name="submit"
type="submit"
class="button"
value="Click Here"
tabindex="13"
onclick="return ValidateForm(); disDelay(this);" />
Ayrıca, kodun birini aynı fonksiyona koymayı denedim ama başarılı olamadım.
disDelay() fonksiyonu şudur
function disDelay(obj){
obj.setAttribute('disabled','disabled');
setTimeout(function(){obj.removeAttribute('disabled')},10000);
}
Formun birden fazla tıklamadan dolayı tekrar gönderilmesini önlemek için bir gecikme olarak kullanılacaktır. Şu anda gecikme sadece test amaçlı olarak 10 saniyedir. Doğrulamanın ve gecikmenin birlikte çalışmasını istiyorum.
Cevap #1
İlk fonksiyonun değerini döndürmek, tıklama işleyicisini sonlandırır. Esasen, birleştirmeye çalışırken yaptığınız şey budur:
<input name="submit" type="submit" class="button"
value="Click Here" tabindex="13"
onclick="return submit_Click(this);" />
<script type="text/javascript">
function submit_Click(sender) {
return ValidateForm();
disDelay(sender); // !!! This call is unreachable !!!
}
</script>
Bunu düzeltmek için işte basit bir seçenek:
<input name="submit" type="submit" class="button"
value="Click Here" tabindex="13"
onclick="return submit_Click(this);" />
<script type="text/javascript">
function submit_Click(sender) {
var r = ValidateForm();
disDelay(sender); // It seems like you would only want to call this
// function if the form is validate, so there should
// probably be an if-statement surrounding it. However,
// I'll leave that up to you.
return r;
}
</script>
Cevap #2
Neredeyse başardın, sadece fonksiyon çağrılarının sırasını tersine çevir.
<input name="submit" type="submit" class="button" value="Click Here" tabindex="13" onclick="disDelay(this); return ValidateForm(); " />
ValidateForm'dan dönen değer, kodun geri kalanının ulaşılamaz olmasına neden olacak, bu yüzden son olması gerekiyor.
