

<input type="checkbox" name="somename" value="1" checked>
Според XHTML синтаксиса му е
<input атрибути />
На www.w3.org по въпроса се чете следното:Checkboxes (and radio buttons) are on/off switches that may be toggled by the user. A switch is "on" when the control element's checked attribute is set. When a form is submitted, only "on" checkbox controls can become successful.
Как да проверим checkbox на PHP
Съгласно тенденцията за преход към HTML5 синтаксисът на checkbox би следвало да бъде такъв
<input type="checkbox" name="checkbox" checked="checked" />
Липсва атрибут value. Той не е задължителен, но от друга страна интерес представлява какво изпраща checkbox на сценария при събмит на формата. Изпраща отговора On, както пишат www.w3.org. За целта стартираме следния код и гледаме резултата.
<?php echo $_POST['checkbox']; ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <form method="post"> <p><label><input type="checkbox" name="checkbox" /> HTML</label></p> <p><input type="submit" value="Отговор" /></p> </form> </body> </html>

Какво следва да очакваме при невдигнат флаг на checkbox? Резултатът е NULL. За целта стартираме следния код и се наслаждаваме.
<?php
$checkbox = $_POST['checkbox'];
if(isset($checkbox) && $checkbox==="on")
{
echo 'checkbox checked<br />';
var_dump($checkbox);
}
else
{
echo 'checkbox not checked<br />';
var_dump($checkbox);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<form method="post">
<p><label><input type="checkbox" name="checkbox" /> HTML</label></p>
<p><input type="submit" value="Отговор" /></p>
</form>
</body>
</html>
Как да проверим checkbox на PHP - вариант 2
Помните ли героите от Матрицата? Те по цял ден гледаха нули и единици. Съгласете се, че е тъпо да гледат по цял ден on или NULL. Тогава да матрицираме кода и да гледаме като хората нули и единици.Пред таг <input type="checkbox"> разполагаме скрито поле <input type="hidden"> с също значение на параметър «name» или както се досещате бъзикаме се с value.
<form …> … <input type="hidden" name="checkbox" value="0"> <input type="checkbox" name="checkbox" value="1"> … </form>
По този начин, ако флага е вдигнат checkbox ще предаде на променлива $checkbox стойност 1, в противен случай скритото поле изпраща 0.
ACHTUNG! Ако формата е с 10 checkbox, то кода ще набъбне като гъба след дъжд, което тоже не е гуд.
Как да проверим checkbox на PHP - вариант 3
Нека се придържаме към изискванията на консорциума W3C и напишем правилно полето в формата.
<form method="post"> <p><label><input type="checkbox" name="checkbox" checked="checked" />HTML</label></p> <p><input type="submit" value="Отговор" /></p> </form>
Като цяло кодът става такъв:
<?php
function checkbox($_var)
{
$res=0; //инициализация
if (isset($_POST[$_var]))
{
if ($_POST[$_var]==='on')
{
$res=1;
}
else
{
$res=0;
}
}
return $res;
}
echo checkbox('checkbox');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<form method="post">
<p><label><input type="checkbox" name="checkbox" checked="checked" />HTML</label></p>
<p><input type="submit" value="Отговор" /></p>
</form>
</body>
</html>
Как Profruit проверява checkbox на PHP - вариант 4
HTML5 все още не е утвърден, а Profruit недолюбва потребителските функции. Главна роля играе функция (int), а още intval(). Тези функции служат за несъмнено преобразуване на значенията в цяло число. При вдигнат флаг сценарият получава 1, а (int) запазва резултата. При неактивен checkbox сценарият получава NULL (помним казаното горе). NULL прекарано през (int) става 0 и налице работещ тригер.
Кодът е този:
<?php
$checkbox = (int)$_POST['checkbox'];
if($checkbox==1)
{
echo 'checkbox = 1';
//to do
}
else
{
echo 'checkbox = 0';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<form method="post">
<p><label><input type="checkbox" name="checkbox" value="1" />HTML</label></p>
<p><input type="submit" value="Отговор" /></p>
</form>
</body>
</html>
Стилизация на checkbox
Елементи на формата се поддават на частична стилизация чрез CSS и тази идея трябва да се оценява като експериментална. По мое мнение това е подобие на минно поле, дори смело бих казал, че това не трябва да се прави, защото не опира до дизайн, а до потребителска нагласа. Видът на елементите съответстват на вида им от операционната система на потребителя. Позволява им бърза ориентация.
И все пак ако ви сърби, заигравка с height, width и padding дава непредсказуеми резултати в различните браузъри.
Интересни техники на стилизация на checkbox:
webdesign.maratz.com
demo.tutorialzine.com
www.filamentgroup.com
examples.wufoo.com
advancestyles.info
В общи линии посочените горе адреси ползват следния трик. Елемент checkbox се прави невидим не чрез присвояване на display:none, а се прибягва до свойство opacity:0. По този начин елементът остава на страницата, остава кликабелен, но напълно прозрачен, а на блока, където се намира checkbox се задава заден фон (background) с картинка. Картинката задава изглед на checkbox. При вдигнат флаг се сменя стила на блока, а това променя фона, съответно индикира изменението на checkbox. Елегантно е картинката да бъде спрайт, за да се избегне премигването при промяна състоянието (подмяната на една картинка с друга по време на зареждането й).
Реализацията на идеята.
/*---------- CSS -----------*/
input {
margin:0;
padding:0;
opacity:0;
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);
}
.checkboxOn {
background:url(checkbox_on.png) no-repeat 0 3px;
}
.checkboxOff {
background:url(checkbox_off.png) no-repeat 0 3px;
}
/*---------- JavaScript-----------*/
function checkboxCheck () {
if (document.getElementById("mycheckbox").checked) {
document.getElementById("checkboxDiv").className="checkboxOn";
}
else {
document.getElementById("checkboxDiv").className="checkboxOff";
}
}
/*---------- HTML-----------*/
<div id="checkboxDiv" class="checkboxOn">
<p><input type="checkbox" id="mycheckbox" onclick="checkboxCheck();" class="checkboxOn" checked="checked"/> Запомни me</p>
</div>
Checkbox и JS
Учебниците по HTML описват таг INPUT с параметър type="checkbox" като "множествен избор на данните". И веднага проблем. Същите тези данни с еднакво име не се обединяват, а презаписват от последното влезнало значение. Помним вариант 2 - Как да проверим checkbox на PHP.
За да избегнем хемороидите предаваме имената от формата на сценария като списък, а PHP а свой ред ще сложи ключове. По този начин получаваме масив $_POST['numbers'] = array()
<input type="checkbox" name="numbers[]" /> <input type="checkbox" name="numbers[]" /> <input type="checkbox" name="numbers[]" /> <input type="checkbox" name="numbers[]" /> <input type="checkbox" name="numbers[]" />
Реверанс към потребителя на вашата страница е, ако има бутон за избор на всички checkbox-ве наведнъж. Това се постига от интерпретатора на javascript, вграден в всеки браузър.
Избор на всички чрез JavaScript
<script type="text/javascript">
function setChecked(obj)
{
var str = document.getElementById("text").innerHTML;
str = (str == "избери" ? "отмени" : "избери");
document.getElementById("text").innerHTML = str;
var check = document.getElementsByName("id[]");
for (var i=0; i<check.length; i++)
{
check[i].checked = obj.checked;
}
}
</script>
<form method="post">
<fieldset><legend>Какво ви интересува на profruit.blogspot.com?</legend>
<p><input type="checkbox" name="id[]" value="1" /> WEB</p>
<p><input type="checkbox" name="id[]" value="2" /> Linux</p>
<p><input type="checkbox" name="id[]" value="3" /> Споделено</p>
<p>
<input type="checkbox" name="set" onclick="setChecked(this)" />
<span id="text">избери</span> всичко
</p></fieldset>
</form>
<script type="text/javascript">
checked = false;
function checkedAll () {
if (checked == false){checked = true}else{checked = false}
for (var i = 0; i < document.getElementById("proform").elements.length; i++) {
document.getElementById("proform").elements[i].checked = checked;
}
}
</script>
<h3>Избор на всички чрез JavaScript</h3>
<form id="proform">
<fieldset><legend>Какъв програмен език владеете?</legend>
<p><label><input type="checkbox" name="html" value="1"> HTML</label></p>
<p><label><input type="checkbox" name="css" value="2"> CSS</label></p>
<p><label><input type="checkbox" name="php" value="3"> PHP</label></p>
<p><label><input type="checkbox" name="sql" value="4"> SQL</label></p>
<p><label><input type='checkbox' onclick='checkedAll();'> избери всички</label></p>
<p><input type="submit" value="Отговор"></p>
</fieldset>
</form>
Избор на всички чрез jQuery
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready( function() {
$("#checkall").click( function() {
if($("#checkall").attr("checked")){
$(".procheck").attr("checked", true);
} else {
$(".procheck").attr("checked", false);
}
});
});
</script>
<h3>Избор на всички чрез jQuery</h3>
<form>
<fieldset><legend>Какъв програмен език владеете?</legend>
<p><label><input type="checkbox" name="html" value="1" class="procheck"> HTML</label></p>
<p><label><input type="checkbox" name="css" value="2" class="procheck"> CSS</label></p>
<p><label><input type="checkbox" name="php" value="3" class="procheck"> PHP</label></p>
<p><label><input type="checkbox" name="sql" value="4" class="procheck"> SQL</label></p>
<p><label><input type="checkbox" id="checkall"/> избери всички</label></p>
<p><input type="submit" value="Отговор"></p>
</fieldset>
</form>
до нови срещи ^.^

0 Response to "Елемент Checkbox"
Публикуване на коментар