@T_verdisla_V
Начинающий

Как сделать checkbox равным 0 или 1?

Доброго времени суток.
Есть такая форма в хтмл
<div class="addItemProject form-group" id="addItemProject">
    <label for="addNewItemProject">Добавить новый проект</label>
    <input type="text" class="form-control" id="newItemTitle" name="newItemTitle" aria-describedby="newTitle" placeholder="Новый проект">
    <small id="newItemTitle" class="form-text text-muted">Введите название нового проекта</small>
    <div class="form-check">
        <input class="form-check-input" id="itemIsThumb" name="itemIsThumb" type="checkbox"  value="checked" />
        <label class="form-check-label" for="itemIsThumb">
            Мини фото?
        </label>
    </div>
    <button class="btn btn-primary" type="submit" onclick="newItemProject();">Добавить</button>
</div>

Она обрабатывается js
function getData(obj_form){
    var hData = {};
    $('input, textarea, select', obj_form).each(function(){
        if(this.name && this.name!==''){
            hData[this.name] = this.value;
            console.log('hData[' +this.name + '] = ' + hData[this.name]);
        }
    });
    return hData;
};

function newItemProject(){
    var postData = getData('#addItemProject');

    $.ajax({
        type: 'POST',
        async: true,
        url: "/admin/addnewproject/",
        data: postData,
        dataType: 'json',
        success: function(data){
            if(data['success']){
                alert(data['message']);
                $('#newItemTitle').val('');
                $('#itemIsThumb').val('');
            } else {
                alert(data['message']);
            }
        }
    });
}


и передает в пхп
function addnewprojectAction(){
    $newItemTitle = $_POST['newItemTitle'];
    $itemIsThumb = $_POST["itemIsThumb"];
    
    $res = addItemProject($newItemTitle, $itemIsThumb);
    if ($res){
        $resData['success'] = 1;
        $resData['message'] = 'Изменения успешно внесены';
    } else {
        $resData['success'] = 0;
        $resData['message'] = 'Ошибка изменения данных';
    }
    echo json_encode($resData);
    return;
}


Подскажите как можно сделать (желательно в js), что бы чекбокс в пхп приходил равный 0 или 1 (false, true)? На данный момент из js приходит itemIsThumb: "checked" всегда, и не важно стоит флажок или нет.
  • Вопрос задан
  • 3804 просмотра
Решения вопроса 1
AngReload
@AngReload
Кратко о себе
У checkbox отмечен он или нет определяется по наличию атрибута checked, а value не меняется.
https://developer.mozilla.org/en-US/docs/Web/HTML/...

function getData(obj_form){
    var hData = {};
    $('input, textarea, select', obj_form).each(function(){
        if(this.name && this.name!=='') {
            var data;
            if (this.type === 'checkbox') {
                console.log('ветка true');
                data = this.checked;
            } else {
                console.log('ветка false');
                data = this.value;
            }
            hData[this.name] = data;
            console.log('hData[' +this.name + '] = ' + hData[this.name]);
        }
    });
    return hData;
};

PS: В value надо писать что он означает, а не отмечен он или нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@LemonFox
stateless mind
Самый простой вариант - добавить hidden input:
<input type="hidden" name="checkbox" value="0" />
<input type="checkbox" name="checbox" value="1" />
Ответ написан
@Merk47
document.addEventListener('DOMContentLoaded', e => {
    for (let checkbox of document.querySelectorAll('input[type=checkbox]')) {
        checkbox.value = checkbox.checked ? 1 : 0;
        checkbox.addEventListener('change', e => {
                e.target.value = e.target.checked ? 1 : 0;
        });
    }
});

Но осторожнее, это меняет поведение для всех checkbox и может сломать систему, если этот скрипт добавить как глобальный.
У Antony Tkachenko способ попроще и работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы