2016-04-12 12 views
0

Eğer bir mod soruyu daha iyi ifade etmeme yardımcı olabilirse, bunu takdir ediyorum çünkü bunu sadece bir örnek vermeden sormak zor. Gördüğünüz gibiNeden değişkenimin bir var bildiriminin içinde bulunması gerekir?

$("#myField").on('keyup', function(event){ 
    var input = $(this), 
     val = input.val(), 
     inputGroup = input.parents('div.input-group') 
     searchingIcon = $(inputGroup).find('i.auto-spinner'), 
     button = $(inputGroup).find('span.input-group-btn > button.btn'), 
     key = event.which, 
     typingTimer; // This throws an error typingTimer is not defined 

    //Clear typing timeout on keypress 
    clearTimeout(typingTimer); 
    //.... more code below.. not important 
    }); 

, ben typingTimer gidince, ben olsun bu durumda, ancak, virgül ardından tek bir basit var bildiriminde benim değişkenler bildirmek ister: İşte oluşturduk bir işlevdir boş bir değişkeni tanımlamak yerine, değişken için olduğu gibi tanımlanmamış bir var hatası. Eğer işleri basitçe değiştirirsem, her şey iyi çalışacaktır. Bu fenomene ilk defa rastlamadım ve bunun nedenini gerçekten bilmiyorum. (;) Ile ayrılmayan değişkenleri nasıl tanımlayacağım konusunda bazı sınırlamalar var mı?

+3

"inputGroup" ifadenizin ardından bir virgül eksik, bu satırdan sonra otomatik noktalı virgül oluşturuyor. Böylece, sonraki tüm ödevler deklarasyon değildir; Bunlar, mevcut değişkenlere (veya o isimde bir değişken yoksa, gizli globals'a) atanırlar. Bunun bir yazım hatası mı, yoksa cevap mı vereceğine emin değilim, çünkü diğerleri aynı yazım hatası yapabilir mi? – apsillers

+1

_ "Bu fenomen ilk defa karşılaştığımda bu olmaz" _: belki o zaman varislerinizi nasıl beyan ettiğinizde bir değişiklik zamanı? – Andy

+0

Gerçekten. Bu bir fenomen değil, yanlış kod. – Stuart

cevap

3

Bildirimlerinizden biri inputGroup = input.parents('div.input-group')'dan sonra bir virgül kaçırıyorsunuz. Diğer tüm bildirimleriniz de bir ifade olduğundan (bunlardan sonra bir = işareti vardır), kendi başlarına geçerli ifadelerdir (sonucu global değişkene atamak). typingTimer'un böyle bir ataması yoktur, bu nedenle tanımlanmamış bir hatadır.

Eksik virgül eklemek sorunu çözecektir.

+0

Ah bu olmalı. Geri dönüp diğer örneklerimi kontrol etmem gerekecek, ama muhtemelen aynı şey. Uzun varyasyonlarım var. – Amir

1

inputGroup bildiriminden sonra bir virgül eksik, bu satırdan sonra otomatik noktalı virgül neden oluyor. Böylece, sonraki tüm ödevler deklarasyon değildir; onlar sadece ödevler vardır ..

Biz açıkça örtük noktalı virgül yazarak daha net koduyla sorunu tasvir edebilir

: böylece sol dışında herhangi bir şekilde kullanarak

// declarations 
var input = $(this), 
    val = input.val(), 
    inputGroup = input.parents('div.input-group'); 

// merely assignments 
    searchingIcon = $(inputGroup).find('i.auto-spinner'), 
    button = $(inputGroup).find('span.input-group-btn > button.btn'), 
    key = event.which, 
    typingTimer; 

typingTimer yok Ödevin el tarafı geçersiz. Yukarıdaki diğer atama ifadeleri kabul edilebilirdir çünkü gizli globals yaratırlar (sıkı modda olmadığınız için).

inputGroup atamasından sonra bir virgül eklerseniz, sonraki satırlar beklediğiniz gibi olur.

+0

Sanırım, inputGroup = input.parents ('div.input-group'), 'ya da' searchIcon ' – LCIII

+0

@ LCIII'den önce en az bir varyasyon anlamına geliyor. Kod bloğunda, sorunu daha açık bir şekilde açıklamak istedim problemli bir örnek, bir çözüm sunmuyor. Açıklık için düzenlenmiştir. – apsillers

İlgili konular