@kat-vetal

Отслеживание состояния checkbox?

Доброе утро. Есть 5 текстовых полей(input) и один checkbox. Необходимо сделать проверку если все 5 полей имеют одинаковое значение тогда checkbox имеет атрибут checked и при вводе в первое поле текст дублируется в 4 и 5 поле, а во второе и 3 идет транслитерация введенного текста. А если checkbox checked тогда при вводе в первое поле идет транслитерация во второе и все. Если мы сняли галочку а потом опять поставили опять текст должен вводится во все поля. Транслитерация с во второе поле происходит за счет плагина здесь проблем нет. Вот что у меня есть
<input type="text" id="navigations-page_title" class="input" name="Navigations[page_title]">
<input type="checkbox" value="1" name="double[fields]" id="double-fields">
<input type="text" id="navigations-pretty_url" class="show" name="Navigations[pretty_url]">
<input type="text" id="navigations-alias" name="Navigations[alias]">
<input type="text" id="navigations-navigation_label" name="Navigations[navigation_label]">
<input type="text" id="navigations-breadcrumb_label" name="Navigations[breadcrumb_label]">








ну и сам js код

var navigationsPageTitle = $('#navigations-page_title').val(),//Заголовок страницы
            navigationsPrettyUrl = $('#navigations-pretty_url').val(),//Адрес странциы
            navigationsAlias = $('#navigations-alias').val(),//Псевдоним
            navigationsNavigationLabel = $('#navigations-navigation_label').val(),//Название в меню
            navigationsBreadcrumbLabel = $('#navigations-breadcrumb_label').val(),//НАзвание в хлебных крошках
            doubleFields = $('#double-fields');//Checkbox


        if (navigationsPageTitle == navigationsNavigationLabel &&
            navigationsNavigationLabel == navigationsBreadcrumbLabel &&
            navigationsPrettyUrl == navigationsAlias) {
            doubleFields.prop('checked', true);

            if (doubleFields.prop('checked')) {
                $('#navigations-page_title').on('keyup', function () {
                    $('#navigations-breadcrumb_label').val($(this).val());
                    $('#navigations-navigation_label').val($(this).val());
                    $('#navigations-alias').val($('#navigations-pretty_url').val());

                });
            }

        }

Код рабочий, но не как не могу реализовать логику
  • Вопрос задан
  • 1183 просмотра
Решения вопроса 2
Stalker_RED
@Stalker_RED
...
doubleFields.prop('checked', true);
if (doubleFields.prop('checked')) 
...

Вы принудительно устанавливаете checked, тут-же его проверяете, и он всегда true. Удивительно.

Кроме того у вас навешивается обработчик keyup но нигде нет кода который снимал бы его.
Ответ написан
@kat-vetal Автор вопроса
Может кому пригодится, реализовал все так
var navigationsPageTitle = $('#navigations-page_title').val(),//Заголовок страницы
                navigationsPrettyUrl = $('#navigations-pretty_url').val(),//Адрес странциы
                navigationsAlias = $('#navigations-alias').val(),//Псевдоним
                navigationsNavigationLabel = $('#navigations-navigation_label').val(),//Название в меню
                navigationsBreadcrumbLabel = $('#navigations-breadcrumb_label').val(),//НАзвание в хлебных крошках
                doubleFields = $('#double-fields');//Checkbox



            if (navigationsPageTitle == navigationsNavigationLabel &&
                navigationsNavigationLabel == navigationsBreadcrumbLabel &&
                navigationsPrettyUrl == navigationsAlias) { //проверка на совпадение полей

                doubleFields.prop('checked', true); //активация checkbox в положение true

                   if (doubleFields.prop('checked') == true) {// если checkbox выбран
                        $('#navigations-page_title').on('keyup', function () {
                        $('#navigations-breadcrumb_label').val($(this).val());
                        $('#navigations-navigation_label').val($(this).val());
                    });
                       doubleFields.on('change', function () {//отслеживаем изменения checkbox

                           if(doubleFields.prop('checked') == false) {
                               $("#navigations-page_title").unbind();// если checkbox false снимаем обработчик keyup

                           } else if(doubleFields.prop('checked') == true){//если checkbox опять true вновь дублируем текст
                               $('#navigations-page_title').on('keyup', function () {
                                   $('#navigations-breadcrumb_label').val($(this).val());
                                   $('#navigations-navigation_label').val($(this).val());
                               });
                           }
                       })
                    }

            }
            
        doubleFields.on('change', function () {//отслеживаем состояние checkbox если изначально стоял unchecked

            if(doubleFields.prop('checked') == false) {
                $("#navigations-page_title").unbind();
            } else if(doubleFields.prop('checked') == true){
                $('#navigations-page_title').on('keyup', function () {
                    $('#navigations-breadcrumb_label').val($(this).val());
                    $('#navigations-navigation_label').val($(this).val());
                });
                $('.input').liTranslit({
                    elAlias: $('.show')
                });
            }
        })
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы