2015-05-01 20 views
6

JS için göreceli olarak yeniyim, fakat daha önce C dilinde programlanmıştım ve başımın tüm olayın etrafından dolaşmaya çalışıyorum. Form girişini doğrulayacak bir komut dosyası oluşturmaya çalışıyorum, ancak kodumun tamamı çalıştırılıyor - eğer/else, döngüler varsa, içindeki her şey - olayın gerçekleşip gerçekleşmediğine bakılmaksızın - sizin içinizdedir. Test etmek ve burada yayınlamayı kolaylaştırmak için, bu sorunu da içeren basit bir program yazdım.Javascript: Fonksiyonlar onclick/onsubmit yerine sayfa yükleme çağrılıyor

HTML:

<button id="test">Test</button> 

JavaScript: sayfası yüklendiğinde (window.onload) ve uyarı zaman açılır gerekirken

Anladığım kadarıyla
function init(){ 
    document.getElementById("test").onclick = alert("hello"); 
} 

window.onload = init; 

, init fonksiyonu çağrılmalıdır "test" kimliğine sahip tuşa tıklanır (onclick). Gerçekte olan şey, sayfanın yüklenmesinden hemen sonra uyarının ortaya çıkmasıdır ve düğmeye basarsam tekrar açılır.

Düşüncelerim, JS'nin yürütüldüğü sırayla ilgili bazı yanlış varsayımlar yaptım, ancak bunun ne olduğunu düşünemiyorum. Bu konuda biraz ışık tutabilir mi? Doğru değil

cevap

10

, bu olmalıdır: Eğer click olay (uyarı bir fonksiyondur) işlevi kendisi atamak gerekir JavaScript gerektiğinden

function init(){ 
    document.getElementById("test").onclick = function() { alert("hello"); }; 
} 

budur.

örneğin bu atın: Ben hello işlevi sonra destekleri () koymadı

function hello() { 
    alert("hello"); 
} 

document.getElementById("test").onclick = hello; 

Not? Bunun nedeni, işlevin kendisinin bir referansını kullanıyorum. Köşeli parantezleri koyarsam, aslında tıklama ataması gerçekleştiği anda işleyen değerini değerlendiren .

Yani yapıyor:

document.getElementById("test").onclick = hello(); 

bu hat çalıştırıldıktan sonra uyarı alerthemen gösterecektir gösterecek.

JavaScript:

+3

Başka bir deyişle: 'x = alert()' şunu belirtir: 'x',' alert() 'statüsünün döndürülen değeridir. Ve iade edilen değer nedir? Öğrenmek için onu uygulayalım - ve bu, yürütmenin gerçekleştiği yer! – Xufox

+0

Cevap verdiğin için teşekkürler! Aslında bu mantıklı. Ancak, üst işlevde kullanmak istediğim tetiklenen işlev tarafından kullanılacak bir değişkeni nasıl geçirebilirim? Yoksa sadece global bir değişken kullanabilir miyim? –

+2

İşlev çağrısını kendisini bir işleve sarmanız gerekir, örneğin: onclick = function() {myFunction (myVariable); }; 'aynı kapsamda olacak – mattytommo

1

evet sizin javascript fonksiyonu sayfası da bu yüzden böyle deneyin tıklama Testi butonuna o init() işlevi çağırmak istiyorum .Eğer yükleyecektir yalnızca arayacak

function init(){ alert("hello"); } 
 

 
window.onload = init;
HTML: 
 
<button id="test" onClick='init()'>Test</button>