2015-07-02 28 views
10

Bir onay kutusu alanında onclick olayı olarak adlandırılan bir işlev var.Bir öğenin kimliğini bir işlev aracılığıyla alın

function changeEnable() 
{ 
    var val = $(this).attr('id'); 
    alert(val); 
} 

<input type='checkbox' checked='' onclick='return changeEnable();' id='someid'> 

ve işlev bende ondan ama undefined döndürür. Söz dizim yanlış mı yoksa bir şey mi özledim?

Bu onay kutuları dinamik olarak oluşturuldu ve farklı kimliklere sahip, bu yüzden bazı görevlerin kimliğini almak istiyorum.

cevap

19

changeEnable işlevinizde this işlevinin window olacaktır.

<input type="checkbox" id="someid"> 
: endişelerini daha iyi ayrılması için etkinliklerinizi eklemek için Javascript kullanmak, bir iyileştirme olarak,

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'> 
function changeEnable(el) { 
    var val = el.id 
    alert(val); 
} 

Veya: Sen işleve parametre olarak elemana referansı geçmesi gerekiyor

$(function() { 
    $('#someid').change(function() { 
     var val = this.id 
     alert(val); 
    } 
}); 

Yukarıdakilerin, erişim nedenlerinden dolayı daha iyi olan change onay kutusunu kullandığını unutmayın.

<input type='checkbox' checked='' onclick='changeEnable(this);' id='someid'> 
function changeEnable(el) 
{ 
    var val = el.id; 
    alert(val); 
} 
+0

Vay. mükemmel çalışır. Hatırlatma için teşekkürler. Bu cevabı zamanlayıcıdan sonra seçeceğim :) Teşekkür ederim! – jackhammer013

+0

Sorun değil, yardım etmekten memnunum. –

+0

Harika bir yanıt, aşağı çekildi. JS için yeni olanlar (bu durumda JQuery) ve JS olaylarını kullanmak isteyenler için, bu senaryo için açık bir şekilde kimliğiniz yoktur, bu yüzden oluşturulan girişlere bir sınıf atamak istersiniz < kutusunu işaretleyin ve' $ ('. myInputClass') 'komutunu kullanın. – MasNotsram

4

ben bu kod, bu şekilde ua lot

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'>` 
function changeEnable(thisobj) 
{ 
    var val = thisobj.id; 
    alert(val); 
} 
+0

'changeEnable' işlevindeki parametreyi unutmayın. –

+0

Teşekkür ederiz! Sadece bunu da seçebilirsem. – jackhammer013

+1

Lütfen bunun neden yardımcı olacağını açıklayın. – curiousdannii

2

kullanımını yardımcı olacağını düşünüyorum işlev

<input type='checkbox' checked='' onclick='changeEnable.call(this);' id='someid'> 

function changeEnable() 
{ 
    var val = this.id; 
    alert(val); 
} 
+0

Bu neden işe yarar? – curiousdannii

+0

çalışıyor, dene. Sadece javascript kullandım. –

+0

Cevabınızı, aslında kodun neden işe yaradığını açıklayan Rory's ile karşılaştırın. – curiousdannii

3

Ayrıca .call yöntemin bilmelidir giriş bağlamı atar:

İlgili konular