2016-03-30 14 views
0

javascript/jQuery'de çok yeniyim, bu yüzden sorum benim için çok kolay ve benim için çok zor olacaksa lütfen benimle birlikte ol.
Bu bir işlevden dolayı, tam kodları çok uzun zamandan beri yayınlamıyorum.Bir işlevden diğerine <a> etiketinin kimliğini alın

Ve ayrıca bir ajax sahip başka bir fonksiyon var ve <a> etiketinin kimliğini almak geçmek istiyorum:

function someName() { 
    jQuery.ajax({ 
    type: 'POST', 
    url: 'thisisprivate.aspx', 
    data: { 
     action: 'MyAction', 
     word: 'Wednesday', 
     count: '4', 
     page: '1' 
    }, 
    success: function(data) { 
     var json = jQuery.parseJSON(data); 
     var htmlInfo = ''; 
     for (i = 0; i < json.length; i++) { 
     var htmlCode = '<a href="#/app/video?id=' + json[i].bcid + json[i].name + '" class="list" id="' + json[i].bcid + '"></a>'; 
     htmlInfo = htmlInfo + htmlCode; 
     } 

     jQuery('#WMVideoxx').html(htmlInfo); 
    } 
    }); 
} 

ve

function VideoDiv() { 
    jQuery.ajax({ 
    type: 'POST', 
    url: 'thisisprivate.aspx', 
    data: { 
     action: 'actionNameHere', 
     idorname: id //I Want to pass the ID here 
    }); 
} 
+0

gibi id geçmesi bu

<a href="#/app/video?id=' + json[i].bcid + json[i].name + '" class="list" id="' + json[i].bcid + '" onclick="VideoDiv('+json[i].bcid+');"></a>

Kişisel VideoDiv fonksiyonu gibi olmalıdır 'VideoDiv (id)' – guradio

+0

, ilk ajax çağrısında birden çok "a" etiketi üretiyorsunuz, hangisini geçmek istiyorsunuz? sonraki ajax çağrısında? –

+0

Değişkenleri nasıl geçeceğinizi öğrenin. –

cevap

1

sizin çapa ile kullanım onclick="function();" ve işlevinde istediğiniz argümanları geçmesi

Kişisel htmlcode

function VideoDiv(id) 
{ 
    //your ajax goes here 
} 
+0

Bu lanet şey çalıştı! –

+0

harika :) @JCBorlagdan ayrıca çoklu argümanları da geçebilirsiniz. –

+0

hmm bu geri getirmek için üzgünüm, çapa etiketi ile satır içi yapmadan bir onclick olay oluşturmak için bir yol var mı? Tıklatılan bağlantı etiketinin kimliğini almak istiyorum, kimliği dinamik ... –

1

bu deneyin: onclick çağrıyı koyabilirsiniz oluştururken a etiketine ve a etiket öğesinden başka bir şey olmayan this nesnesini geçirin, aşağıdaki kodu inceleyin

var htmlCode = '<a href="#/app/video?id='+json[i].bcid+json[i].name+'" class="list" id="'+ json[i].bcid +'" onclick="VideoDiv(this)"></a>'; 

Şimdi javascript fonksiyonu

function VideoDiv(anchor) 
{ 
    jQuery.ajax({ 
      type: 'POST', 
      url: 'thisisprivate.aspx', 
      data: { 
       action: 'actionNameHere', 
       idorname: anchor.id //pass id here from anchor object 
      } 
     }); 
} 

NOT aşağıdaki değişiklikleri yapın: Veri ajax çağrısı eksik yukarıdaki, düzeltin lütfen bağlıyor.

+0

niçin bu sayıya tıkladığımda -1 oldu ..>. < –

+0

Ah adam, küçük bir hata. Düzeltmek mi istiyorsun yoksa düzeltmek mi? –

+0

@JCBorlagdan Kod arkadaşında bir hata var gibi görünüyor. –

2

Ne yapıyorsun geçerli:

jQuery('a').click(function() { 
    VideoDiv(jQuery(this).attr('id')); 
}); 

Bunun nedeni <a> etiketinin doğanın çalışmaz dinamik olarak oluşturulan ve olay kayıtlı almaz. olay (Daha fazla bilgi için Understanding Event Delegation bakınız) devrederek düşünün:

jQuery(document).on("click", 'a', function() { 
    VideoDiv(jQuery(this).attr('id')); 
}); 

Yukarıdaki kod çalışır, ancak belgenin içindeki tüm <a> için yetki edecektir. Bunun yerine, bunu benzersiz olarak tanımlayan bir sınıf veya bir şey ekleyin.

jQuery(document).on("click", 'a.class', function() { 
    VideoDiv(jQuery(this).attr('id')); 
}); 

kod yukarıdaki heyeti hakkında başka bir şey, document yerine yakın statik ebeveyn kullanmak daha iyidir: Ve bu şekilde diyoruz. HTML yapısını bilmediğimden, document'u kullandım. Ayrıca

:), Ismael Miguel söylediği gibi, this.id kullanılarak id almak daha iyidir:

jQuery(".static-parent").on("click", '.class', function() { 
    VideoDiv(this.id); 
}); 

yukarıda iyi kod olurdu.

Ayrıca, işaret edilmiştir yine daha iyi performans için, size bu kodu değiştirebilir:

setTimeout(
    (function() { 
    VideoDiv(this.id); 
    }).bind(this), 10 
); 
Bu jQuery sonraki bile işleyicisi halledeyim olacak

ve sonraki 10ms bu kodu çalıştırmak olacaktır (uygun olunca).

+2

Bunu yapma! Sadece bunu yap. Lütfen! Tek bir 'id' getirmek için işlem süresini ve disk alanını boşa harcamayın. Lütfen! Sadece jQuery kullanılabilir olduğu için, her zaman onu kullanmak zorunda olduğu anlamına gelmez. –

+0

Çok teşekkür ederim! Hepimiz bu küçük tavsiyeyi ödüllendireceğiz.Bunu yapmak için ** çok daha iyisi, daha iyi, pek çok fayda olmadan, bir setTimeout ((function() {VideoDiv (this.id);}) kullanabilirsiniz. Bind (this), 10); '. Bu, jQuery'nin bir sonraki ikili işleyiciyi işlemesine izin verir ve bu kodu sonraki 10ms'de (kullanılabilir olduğunda) yürütür. –

+0

@IsmaelMiguel Anlamıyorum. SetTimeout ne yapar? –

İlgili konular