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.