2015-09-07 30 views
10

Her zamanki gibi varsayılan olarak işaretlenmemiş bir formda bir onay kutunuz var. şimdi bu onay kutusunun işaretli ve işaretlenmemiş durumunda iki ayrı eylem gerçekleştirmek istiyorum.html formunda onay kutusu işaretli veya işaretlenmemiş bir eylem gerçekleştirin

bu benim onay kutusu:

<form> 
    syn<input type="checkbox" name="checkfield" id="g01-01" onchange="doalert(this.id)"/> 
</form> 

ve bu benim senaryom:

function doalert(id){ 
    if(this.checked) { 
    alert('checked'); 
    }else{ 
    alert('unchecked'); 
    } 
} 

sadece uncheched uyarır !! Bunu yapmanın en iyi yolu nedir.

+0

Bu işlevinde ne var? – Popnoodles

cevap

23

Bunu jQuery gerekmeden JavaScript kullanarak yapabiliriz. Sadece değiştirilen öğeyi geçir ve JavaScript'in ele almasına izin ver.

HTML

<form id="myform"> 
    syn<input type="checkbox" name="checkfield" id="g01-01" onchange="doalert(this)"/> 
</form> 

JS

function doalert(checkboxElem) { 
    if (checkboxElem.checked) { 
    alert ("hi"); 
    } else { 
    alert ("bye"); 
    } 
} 

Demo Here

+0

İyi bir cevap, OP'nin neden sorun yarattığını ve çözümünüzü neden düzelttiğini açıklamalıdır. – RobG

+0

tek doğru cevap, formdaki çeşitli öğeler için aynı kimliği kullanmak zorunda olduğum için bu oldu. thnaks – shekoufeh

+3

@shekoufeh Sorununuzu çözen bu harika bir cevap olsa da, diğer tüm cevapların da doğru olduğu bilinmelidir, çünkü bir dokümanda aynı kimliği kullanamazsınız. Gerekirse, onu bir sınıfa değiştirmelisiniz. –

1
<form> 
    syn<input type="checkbox" name="checkfield" id="g01-01" /> 
</form> 

js:

$('#g01-01').on('change',function(){ 
    var _val = $(this).is(':checked') ? 'checked' : 'unchecked'; 
    alert(_val); 
}); 
+0

Kodda cevaplar, özellikle OP'de etiketlenmemiş veya belirtilmemiş bir kütüphaneye ihtiyaç duyduğunda ve soruyu ya da neden cevabınızı açıklamıyorsa sevilmez o. – RobG

1

JQuery değişiklik olayını kullanarak denediniz mi?

$("#g01-01").change(function() { 
    if(this.checked) { 
     //Do stuff 
    } 
}); 

Sonra da onay kutusu :) dan onchange="doalert(this.id)" kaldırabilir

Düzenleme:

henüz kullanmadığınız takdirde seni JQuery kullanıyorsanız biliyorum, ama yok , aşağıdaki betiği sayfanıza koymanız gerekir, böylece kullanabilirsiniz:

+0

jQuery'de bir değişiklik olayı yok. – RobG

+3

@RobG http://www.w3schools.com/jquery/event_change.asp –

+0

Bu ID'yi bir defada başka bir amaç için tekrar ettim, böylece bu şekilde işleyemiyorum. – shekoufeh

0

Hata ayıklarsanız kodunuzu geliştirici araçlarını kullanarak, this'un giriş nesnesini değil, pencere nesnesini ifade ettiğini fark edeceksiniz. Girişi almak için iletilen kimlik kodunu kullanmayı düşünün ve checked değerini kontrol edin.

function doalert(id){ 
    if(document.getElementById(id).checked) { 
    alert('checked'); 
    }else{ 
    alert('unchecked'); 
    } 
} 
+1

Lütfen kodunuzun ne hakkında daha fazla açıklama eklemek için yayınınızı düzenlemeyi düşünün. ve neden sorunu çözecek? Çoğunlukla sadece kod içeren bir cevap (çalışsa bile) genellikle OP'nin problemlerini anlamasına yardımcı olmaz. – Reeno

2

sorun dinleyici ekledim nasıl:

<input type="checkbox" ... onchange="doalert(this.id)"> 

Inline dinleyici etkin bir bu olarak eleman ile çağrılan bir işlevde sarılmıştır. Bu işlev daha sonra doalert işlevini çağırır, ancak değerini olarak ayarlamaz, böylece genel nesneye (tarayıcıdaki pencere) varsayılan olur.

Pencere nesnesi, işaretli olduğundan özelliği, this.checked her zaman false olarak giderilmiştir.

Eğer eleman olmak doalert içinde bu istiyorsanız, addEventListener kullanarak dinleyici ekleyin:

window.onload = function() { 
    var input = document.querySelector('#g01-01'); 
    if (input) { 
    input.addEventListener('change', doalert, false); 
    } 
} 

Yoksa bir satır içi dinleyicisi kullanmak istiyorsanız:

<input type="checkbox" ... onchange="doalert.call(this, this.id)"> 
İlgili konular