Onay kutuları genellikle veritabanında Evet / Hayır, E / H veya 1/0 değerleri olarak depolanan ikili verileri temsil eder. HTML onay kutuları, yalnızca onay kutusu işaretliyse sunucuya değer göndermek için kötü bir yapıya sahiptir! Bu, başka bir sitedeki sunucu komut dosyasının, pozitif (işaretli) veya negatif (denetlenmemiş) değerleri depolayabilmek için web sayfasındaki tüm olası onay kutularının önceden bilmesi gerektiği anlamına gelir. Aslında sadece negatif değerler sorunludur (kullanıcı daha önce (önceden) kontrol edilen değeri işaretlediğinde - bu adın önceden gönderilmesi gerektiğini bilmiyorsa hiçbir şey gönderilmediğinde sunucu bunu nasıl bilebilir). Dinamik olarak UPDATE komut dosyası oluşturan bir sunucu tarafı komut dosyanız varsa, denetlenenler için Y değerini ve işaretlenmemiş (alınmamış) olanlar için N değerini ayarlamak için tüm onay kutularının alınması gerektiğini bilmediğiniz için bir sorun vardır.
Veritabanımda 'Y' ve 'N' değerlerini sakladığım ve bunları sayfadaki işaretli ve işaretsiz onay kutuları aracılığıyla temsil ettiğim için, 'Y' ve 'N' değerlerine sahip her bir değer (onay kutusu) için gizli alan ekledim, sonra sadece görsel olarak onay kutularını kullandım ve seçime göre olup olmadığını ayarlamak için basit JavaScript işlev kontrolü () kullanın.
<input type="hidden" id="N1" name="N1" value="Y" />
<input type="checkbox"<?php if($N1==='Y') echo ' checked="checked"'; ?> onclick="check(this);" />
<label for="N1">Checkbox #1</label>
web sayfamdaki her onay kutusu için bir JavaScript onclick dinleyicisi ve çağrı işlevi denetimi () kullan:
function check(me)
{
if(me.checked)
{
me.previousSibling.previousSibling.value='Y';
}
else
{
me.previousSibling.previousSibling.value='N';
}
}
Bu şekilde 'Y' veya 'N' değerleri her zaman sunucu tarafı komut dosyasına gönderilir, güncellenmesi gereken alanların ne olduğunu bilir ve "değer" üzerindeki checbox'ın "Y" ye dönüştürülmesine veya onay kutusu alınmadan onay kutusunu "N" ye çevirmeye gerek yoktur '.
NOT: beyaz boşluk veya yeni çizgi de bir kardeş bu yüzden burada .previousSibling.previousSibling.value gerekir. O zaman sadece .previousSibling.value arasında boşluk yoksa
Daha önce olduğu gibi onclick dinleyicisini açıkça eklemenize gerek yoktur, sayfanızdaki tüm onay kutularına değer değiştirmek için işlevli tıklama dinleyicisini dinamik olarak eklemek için jQuery kitaplığını kullanabilirsiniz:
$('input[type=checkbox]').click(function()
{
if(this.checked)
{
$(this).prev().val('Y');
}
else
{
$(this).prev().val('N');
}
});