2012-05-30 29 views
5

olduğu onload() tetikler, ekleme yapılması yoluyla eklendi vücut. Şimdi benim sorunum, sayfa yüklendiğinde sayfanın iki uyarı üretmesiydi, ama sadece bir kez 'yükün' tetiklenmesi gerektiğinden sadece bir tane üretmesini bekledim- Herhangi bir javascript olmadan görüntüyü el ile eklediğimde olduğu gibi oluyor.
Ben yapılan keman bakınız: http://jsfiddle.net/9985N/jQuery img benim için baş ağrısı üreten kod oldukça basit iki kez

Herhangi bir yardım/açıklama büyük takdir ...

+0

'.html (...)' yöntem bunu düzeltmek olacak, ama hiçbir fikrim yok neden bu – Teneff

+0

oluyor offtopic olabilir, ancak 'load' takmak asla değildir görüntülerde. – Jashwant

+1

@Jashwant: Nedenini açıklar mısınız? 'coz Ben dx w3c adamlar bu konuda bir şey bahsetmek görüyorum: http: //www.w3schools.com/jsref/event_img_onload.asp – Erric

cevap

6

GÜNCELLEME (bazı insanlar lol, inan yapmadığından)

Çünkü .append ilk önce düğümü oluşturur ve ardından m onu uygun pozisyonuna getirir. daha sonra ilk elemanı ekleme aşağıdaki gibi onun özelliklerini eklemeyi deneyin:

$(function() { 
    $("#test").append(
     $("<img />").attr({ 
      src: "http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Bachalpseeflowers.jpg/300px-Bachalpseeflowers.jpg", 
      onload: "alert(\'hi\')" 
     }) 
    ); 
}); 

Benim cevabım sorun "önlemek" değil, çok doğrudan cevap verir. Eğer jQuery.js dosyasını sıkıştırılmamış biçimde açarsanız, .append'un node belgesini, onload olayının ilk çağrıldığı ve shifts yeniden çağrıldığında olduğu konuma getirdiğini açıkça görebilirsiniz. Belki de kelime yanlış kelimedir, kelime hazinesi benim güçlü takımım değil, beni affet. Ancak, kodu takip ederseniz, onun yaratılışını ve hareketini görürsünüz, ancak yine de, onu taşımak için tekrar eklemenin kullanımı için söylenmez. Düğüm zaten oluşturulduğu için, sadece bir elemandan diğerine bir yük boşluğu olmaksızın hareket eder. Dediğim gibi, en iyi terminolojiden emin değilsiniz, ancak jQuery.js'da takip edilmesi çok kolaydır.

Bana inanmıyor musunuz? Sadece 0 ile fiddle MSIE9, FF12, & GoogleChrome20 0 sorunları ile test ettik.

jsFiddle

sadece Bilginize, gerçekten korkunç bir uygulama değildir, ama insanlar jQuery her zaman ve yenilgilerden bu tür amacı HTML bütün satırları yazmak bkz. Bu amaçla okumak için pek çok kitap içeren bir kütüphane. Bazen tam bir HTML satırı daha kolay görünebilir, ancak sizin için yapılmış olan tüm harika düzen çalışmalarına uymadığı için daha hızlı olmayabilir. Buradaki fikir "Daha az yaz, daha fazlasını yap" ve bu HTML'yi içerir. Sonuçta, tüm HTML satırını yazacak olsaydınız, jQuery'yi neden sadece PHP'de kullanabiliyorsunuz? : P Sadece bir düşünce.

+2

-1 Cevabınız sorunu önlemektedir. Aslında, uyarı, nesneyi herhangi bir yere eklemeden bile iki kez gösteriliyor ... sadece $ (' Teneff

+1

Neden tek elemanı varsa onu değiştirebilir? – Jashwant

+1

@tenneff: harika nokta-maalesef bu karışıklığı daha da artırır-bu bir jquery hatası mıdır? – Erric

0

veya bu: Kullanılması

var img = $('<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Bachalpseeflowers.jpg/300px-Bachalpseeflowers.jpg"/>').on('load', function(){ 
    $('#test').append(img); 
    alert('loaded'); 
}); 
+0

Sorundan biraz farklı - resim yüklendiğinde kodunuz eklenir, değil mi? (Tersten bahsediyordum) – Erric