2013-08-01 23 views
6

'yüklendi' ve 'no' değerinin başlangıç ​​değeri olan bir düğme oluşturdum. Düğmeye tıkladıktan sonra bazı ajax çalıştırıyorum ve bunun sonunda 'yüklenen' özniteliğini 'evet' olarak ayarlamaya çalışıyorum, böylece kullanıcı düğmeye bir defadan fazla basarsa ajax tekrar çalıştırılamaz. . http://jsfiddle.net/PDW35/2/Özellik değerini ayarlamak için jQuery .attr veya .prop kullanma

düğmesini tıklamak 'evet' yüklenen değişir değildir:

Böyle bir şey var. Böyle .attr çağrısından sonra bir uyarı doğru yaparsak Ancak:

alert($(this).attr('loaded')); 

uyarı kutusu çünkü kullanıcı tıklama kez, aynı kod üzerinde bir koyar yardım etmez ki 'evet' içeriyor mu Ekranda 'hayır' uyarı kutusu.

.attr yerine .prop kullanırsam hepsi aynı şekilde davranır. Burada bir noktayı veya .prop ve .attr eksik öznitelikleri ile çalışmaz mı?

DÜZENLEME: Aşağıdaki açıklamalara dayanarak Güncelleme jsfiddle kullanarak ajax: Kullanıcı butonuna tıklarsa http://jsfiddle.net/PDW35/5/

+1

Özgün kaynak kodunu 'loaded' özniteliğini kontrol ederken herhangi bir olasılıkla görüntülüyor musunuz? Çünkü Chrome – CodingIntrigue

+0

'da bu kulağımda işe yaradığı için her seferinde düğmeyi ikinci kez tıklıyorum ve böyle devam ediyor - evet diyor. Özellik doğru ayarlanmış. Ancak 'data-'ile başlayan izin verilen öznitelikleri kullanmaya çalışın ve onlarla çalışmak için jQuery işlevini kullanın. –

+0

Kendi özniteliklerini oluşturuyorsanız, bunu 'data-' ile önekleyin. Ayrıca, özellik adları alt çizgi içermez. – Blender

cevap

3

Ben orijinal kod çalışmıyor olmasının bir sebebi de tam olarak emin değilim ama $this nedense nedeni gibi görünüyor:

$(".preview-button").click(function(){ 

var id = $(this).attr('button_id'); 
var loaded = $(this).attr('loaded'); 
    if(loaded == "no"){   
     $(this).attr('loaded', 'yes'); 
    }else{ 
     alert("Data is loaded");  
    } 
}); 

burada örnek çalışma. Aşağıdan dene ve işe yaramış görünüyor. Fiddle burada.

Cevabımı, bulduğum anda sebebi ile güncellemeye çalışacağım.

var loaded = $(".preview-button").attr('data-loaded'); 
if (loaded === "no") { 
    $.ajax({ 
     success: function (result) { 
      $(".preview-button").attr('data-loaded', 'yes'); 
      alert($(".preview-button").attr('data-loaded')); 
     } 
    }); 
} else { 
    alert("data loaded"); 
} 

bu thread bakın ve $this doesnt AJAX çağrısı içinden çalışmıyor gibi görünüyor neden bu nedeni gibi görünüyor.

+0

Bu ilginç, haklısın! Şuanda çalışıyor, eğer bu başarısızlığın nedenini bulursam, burada da göndereceğim! – mmvsbg

+0

Sanırım $ (bu) .ajax başarı fonksiyonunun içinde tanımlanmamış (veya daha büyük olasılıkla önceden tanımlanmış) değil. Aşağıdaki JSfiddle'a bir göz atın: http://jsfiddle.net/PDW35/8/ İlk uyarı kutusu, düğmenin sınıfını gösterir, ikincisi sadece 'undefined' yazıyor. – mmvsbg

+2

@mmvsbg eşleşme yok, cevabı yaptım güncellemeyi kontrol edin. Ajax araması içinde $, bu, olayı tetikleyen düğmenizi değil, aramayı ifade eder. Bu ilk alarma (ajax dışında) çalışır ve diğer (iç) neden olmasın nedeni budur. – Harry

1

soru okuma ..

yüzden ajax tekrar koştu olmadığını daha bir Zamanlar. i one() gerek

, bu olay sadece bir kez çalışmasını sağlar .. senin click için nitelik ve özelliklerini

örnek

$(".preview-button").one('click',function(){ 
//your ajax stuff 
    alert('clicked!!!!'); 
}); 
+0

Bu iyi bir ipucu, ancak, düğme üzerinde bir tıklama üzerine yaptığım diğer şeylerden biri .Slide bir kereden fazla olması gereken bir div. Sadece ajax'i bir kere yüklemek istiyorum (aşağı yukarı kayması gereken divun içine girer). – mmvsbg

0
Sen özelliğini ayarlayabilirsiniz

değişen gerek (veya submit) işlevi:

$(".preview-button").click(function() { 
    this.ajaxCompleted = this.ajaxCompleted || false; 

    if (!this.ajaxCompleted) { 
     // run your request and set this.ajaxCompleted to true in a callback; 
    } 

    // do other stuff 
}); 
İlgili konular