Ekli javascript denetimleri olan widget'ları var.
Pencere öğesi yönetici sayfası yüklendiğinde pencere öğesi varsa, denetimler düzgün çalışır.
Yeni bir widget eklediğimde, düzgün çalışmıyorlar, biçimlendirmeyi alıyorum, ancak hiçbir javascript etkinliği etkili olmuyor.
Yeni widget'ı kaydedersem, form yeniden yüklendiğinde, denetimler doğru şekilde oluşturulur ve şimdi çalışır.
Sayfanın yenilenmesi sorunu da giderir, ancak yalnızca mevcut widget'lar için. Yeni widget'larda bu sorun hala var.
Özellikle bu noktalarda seçili girişlerde selectize çalıştırıyorum:
- belge hazır
- Ajaxcomplete
Kodumun her olayda istendiği gibi çalıştırıldığını doğruladım, ancak sonuçlar beklendiği gibi değil.
İşte sorunu gösteren bir test eklentisi:
https://gist.github.com/Tarendai/8466299
Dönüşüm sağlayabildiği her seçme öğesi ile artan bir sayacım olduğunu göreceksiniz.
Notlar:
- Widget sayfası yüklendiğinde, sayacın beklendiği gibi JS konsolunda arttığını görebiliyorum
- Yeni bir widget eklediğimde, kod çalıştırılır, ancak found.length 0 ile gösterildiği gibi üzerinde çalışabileceği herhangi bir seçim öğesini bulamaz. Bu durum, bu türdeki her yeni widget'ın seçme elemanı var
- select öğelerinin onları tanımlamak için bir sınıfı vardır, bu sınıf, varolan widget'larda çoğaltmayı ve yeniden işlemeyi önlemek için select kütüphanesi uygulandıktan sonra kaldırılır.
- Select'i kullanmadan önce, aynı sorunu yaşayan Select2'yi kullandım
- AJAX kodu yorum, ben yeni widget standart bir seçim girişi olmasını beklenir. Onlar yapmıyor. Neden böyle olduğunu bilmiyorum
Öyleyse kullanıcıya değişiklik yapmadan önce kaydetmeyi yenilemesini / tıklamasını bildirmeden seçme denetimini nasıl çalıştırabilirim?
jQuery( document ).ajaxStop( function() {
ve yeni yüklenen widget'lardaki denetimleri başlatabilmek için parçayı neden ekledim . Ancak bu satırı kaldırsaydım, yeni widget'ların standart HTML seçme girişlerine sahip olmasını beklerdim, ancak = s
widget-updated
ve widget-added
olaylarını kullanarak en temiz yaklaşımdır . Ayrıca @michaeljames kodunda, element id kullanımını vurgulamak istiyorum #widgets-right
. JS kodunuzdaki etkin widget öğelerini hedeflemek için kullandığınızdan emin olun, aksi takdirde kodunuz ekranın sol tarafında gizli etkin olmayan widget öğelerini de seçebileceğinden (ve widget eklendiğinde klonlanır).
.on()
yöntemini kullanarak bakmanız gerekecektir . Bu, bir olayı belgeye bağlamanızı gerektirir. Ancak hangi olayın uygun olacağından emin değilim. Sonuçta, orijinal bağlarınızın sayfa yüklendiğinde DOM'un ilk sürümünü temsil etmesi ve çoğunlukla ajax yoluyla eklenen yeni öğelere (widget içeriği) kör olmasından kaynaklanır. Umarım bu sizi doğru yöne yönlendirir, eğer değilse işteyken daha iyi cevap verebilirim.