2010-11-22 11 views
2

Kodumda gizemli bir sorunu izliyorum. Sen bazı değişkenlere tanımlanır nerede olduğunu ve ne içindir, gizemli bir şeydir için çeke olur gerekmeztypeof jQuery.data() buggy?

my.$table_body.delegate('.wf-dropdown', 'change', function(e){ 
    parent_row_element = $(e.target).closest('tr')[0]; 

    if(typeof $.data(parent_row_element, 'changed') == 'undefined') 
     $.data(parent_row_element, 'changed', {}); 

    $.data(parent_row_element, 'changed').wf_id = e.target.value; 
    // .. more code 
}); 

: Bu "hata" jQuery en .delegate() aracılığıyla bağlandı bir event handler içinde olur undefined değeri. Açıkça parent_row_element'a eklenmiş bir nesne olup olmadığını kontrol edin ve eğer oluşturmadıysanız oluşturun. Gerçekten açıklayamayacağım bir şekilde typeof $.data(anything) başarısız gibi görünüyor. Firebug gibi bir hata ayıklayıcı ekliyse, undefined doğru olarak değerlendirir ve her şey hata ayıklayıcısız çalışır, .wf_id atama her zaman, nesne tanımlanmamış olduğundan, çünkü tanımlanmamış olduğundan atar.

bu deyimi kullanın eğer mükemmel çalışıyor: Bunun bir hata olduğunu tahmin yüzden

if(!$.data(parent_row_element, 'changed')) 
    $.data(parent_row_element, 'changed', {}); 

. Yoksa burada bir şeyi gözden kaçırıyor muyum? Bu davranışı yeniden olabilir

:

tıklamada bir hata atar typeof
http://www.jsfiddle.net/5cEVf/

hiçbir typeof
http://www.jsfiddle.net/5cEVf/3/

+1

Burada '==' yerine '===' kullanımıyla korkutucu bölgede bulunuyorsunuz. (oh "typeof" sonucunu bekle - boşver) – Pointy

+0

@Pointy: Sanmıyorum? '==' hiç bir sorun olmamalı, her ikisi de hata ayıklama modunda '==' ve '===' '' true 'olarak değerlendirmelidir. – jAndy

+1

neden "typeof" sonucunu 'uyandırmıyorsunuz, böylece bir hata ayıklayıcısını kullanmadan neler olduğunu görebilirsiniz. –

cevap

3

Yükseltme geçmiş 1.4, gayet iyi çalışıyor kullanılır. 2 ve sabittir.

typeof sonucunu uyarırsanız, 1.4.2'de object elde edersiniz.

+1

Bir 'dönüş boşluğu' gibi görünüyor, '' 1.4.2’de artık sadece 'dönüş'' – Pointy

+0

Şunun gibi görünüyor. Çok karışıktı çünkü bir FireBug hata ayıklama oturumu sırasında tüm 'typeof' ifadesini değerlendirirseniz, gerçekten 'undefined' döndürür. – jAndy

+0

btw .. Bu özel proje için 1.4.4'e yükseltemiyorum. Yeni css kullanımı, kodu çok sayıda yerde sıkıştırıyor. – jAndy

1

Sorun, değer null olarak ayarlanmış ve null bir nesnedir.

'object''object' döndürür ve if başarısız olur ve nesne sıfır olduğundan yeni bir özellik atama başarısız olur.

+0

Değerin aslında "boş" olduğunu sanmıyorum - Gerçekten 1.4.3 veya 1.4.4'te düzeltilmiş bir jQuery hatası gibi görünüyor. Belirli bir öğe için hiçbir "veri" maddesi bulunmadığında eski kod * açıkça "boş" değerini döndürür. – Pointy

+0

@Pointy, evet '.data() 'nın dönüşü null ve' typeof null == 'object'' olacaktır. –

+0

Bunu zaten patrick dw'nin cevabına bir yorumda işaret ettim. Firebug debbug izleme, ifadeyi zaten 'undefined' olarak değerlendirir. – jAndy

İlgili konular