Как назначить полю действие появляться при метке чекбокса

Главные вкладки

Аватар пользователя iNFerNo iNFerNo 6 декабря 2011 в 13:05

Добавил поле чекбокс. По умалчанию выставил его помеченным.

Добавил поле 1 и поле 2.

Полю 1 назначил появляться при помеченом чекбоксе. А полю 2 при отключенном.

На выходе поле 2 не появляется вовсе. Поле 1 исчезает появляется при изменении чибокса.

Задача. Как привязать/показывать поле 1 при не помеченном чекбоксе?

м.б. form_alter по форме этого типа материала как то условие проверять на вкл выключенный чибокс? Хотя наверное это не то...

очень надо подскажите.

Не охота делать 2 чибокса для каждого поля...

Комментарии

Аватар пользователя iNFerNo iNFerNo 6 декабря 2011 в 14:14

и как сделать так что бы при заполнение поля 1, поля 2 не могло бы заполняться... после смены чекбокса...

а то не понятно зачем мне 2ва заполненных поля на один чекбокс например.

Аватар пользователя divined divined 6 декабря 2011 в 18:11

Я как штатный экстрасенс компании, могу позволить предположить что это форма Smile

На основе этого предположения я могу выдвинуть гипотезу об использовании javascript, а именно jQuery для столь мизерных задач, возможно нечто эфемерное типа:

$('#checkbox_id').click(function(){
  if ($('#checkbox_id').attr('checked')=='checked') {
    $('#input_1').show();
    $('#input_2').hide();
    //часть которая касается второго вопроса (по моему мнению это лишнее)
    if ($('#input_2').val()!='') {
       $('#input_1').attr('disabled','disabled');
    }
  } else {
    $('#input_2').show();
    $('#input_1').hide();
    //часть которая касается второго вопроса (по моему мнению это лишнее)
    if ($('#input_1').val()!='') {
       $('#input_2').attr('disabled','disabled');
    }

  }
});

Я специально не использовал сокращенные конструкции и цепочки событий jQuery для наглядности.

Аватар пользователя divined divined 7 декабря 2011 в 11:09

Ну без скриптов у нас сейчас никуда не устроиться Smile

Я на каждом своем сайте, в папке с темой создаю один JS файл, подключаю его через файл theme_name.info и в нем пишу все интересующие меня скрипты.

Вроде в этом скрипте все ответы

$('#checkbox_id').click(function(){ //устанавливается событие на нажатие chtckbox'а
  if ($('#checkbox_id').attr('checked')=='checked') { //Если активный
    $('#input_1').show();  //Показывать поле 1
    $('#input_2').hide();  //Скрывать поле 2
    //часть которая касается второго вопроса (по моему мнению это лишнее)
    if ($('#input_2').val()!='') { //Если поле 2 было заполнено ранее
       $('#input_1').attr('disabled','disabled'); //Отключить возможность заполнения поля 1
    }
  } else { //Иначе, если после нажатия checkbox неактивный
    $('#input_2').show(); //Показывать поле 2
    $('#input_1').hide(); //Скрывать поле 1
    //часть которая касается второго вопроса (по моему мнению это лишнее)
    if ($('#input_1').val()!='') { //Если поле 1 было заполнено ранее
       $('#input_2').attr('disabled','disabled'); //Отключить возможность заполнения поля 2
    }
 
  }
});
Аватар пользователя divined divined 7 декабря 2011 в 13:33

iNFerNo

checkbox_id - это селектор, он указан как пример, вместо #checkbox_id, #input_2 и т.д. нужно писать id или классы элементов, к которым вы хотите привязать событие, или выполнить над ними действие.

если указываете id, то селектор: #id
если класс, то селектор .class
примерно как в css

не забудьте все это обернуть в

$(document).ready(function(){
//Тут код.
}

Аватар пользователя iNFerNo iNFerNo 7 декабря 2011 в 15:36

edit-field-external-source-value - поле сск 3 (чекбокс)

edit-field-link-to-external-source-0-url поле сск 1 (текстовое)

edit-field-internal-source-0-nid-nid - поле сск 2 (текстовое)

это эти селекторы? или что то еще?

Аватар пользователя iNFerNo iNFerNo 7 декабря 2011 в 15:55
$(document).ready(function(){

$('#edit-field-external-source-value').click(function(){ //устанавливается событие на нажатие chtckbox'а
  if ($('#edit-field-external-source-value').attr('checked')=='checked') { //Если активный
    $('#edit-field-link-to-external-source-0-url').show();  //Показывать поле 1
    $('#edit-field-internal-source-0-nid-nid').hide();  //Скрывать поле 2
    //часть которая касается второго вопроса (по моему мнению это лишнее)
    if ($('#edit-field-internal-source-0-nid-nid').val()!='') { //Если поле 2 было заполнено ранее
       $('#edit-field-link-to-external-source-0-url').attr('disabled','disabled'); //Отключить возможность заполнения поля 1
    }
  } else { //Иначе, если после нажатия checkbox неактивный
    $('#edit-field-internal-source-0-nid-nid').show(); //Показывать поле 2
    $('#edit-field-link-to-external-source-0-url').hide(); //Скрывать поле 1
    //часть которая касается второго вопроса (по моему мнению это лишнее)
    if ($('#edit-field-link-to-external-source-0-url').val()!='') { //Если поле 1 было заполнено ранее
       $('#edit-field-internal-source-0-nid-nid').attr('disabled','disabled'); //Отключить возможность заполнения поля 2
    }
 
  }
});

});

чото не очень. сначала по дефолту показывается все что надо а потом когда когда кликаешь какая та муть

Аватар пользователя iNFerNo iNFerNo 7 декабря 2011 в 16:15

ну не работает функция описанная в коде.

по дефолту (заданному изначально)

чекбокс с галкой
поле1 показывать

после снятия чибоксов как и положено (по заданому условию ) исчезает и уже больше не появляется а про 2 поле молчу о нем вообще ничо не слышно не видно

Аватар пользователя iNFerNo iNFerNo 7 декабря 2011 в 16:21

так что то началось работать.

я убрал все связи с условными полями.

оставил только чибокс с дефолтынм значением. включеным.

как сделать так что бы вкл по дефолту тоже отрабатывалось в функции?

Аватар пользователя iNFerNo iNFerNo 7 декабря 2011 в 16:27

такой код вот скрывает в принципе после клика мышкой. дефолтно не скрывает

$(document).ready(function(){

$('#edit-field-external-source-value').click(function(){

  if ($('#edit-field-external-source-value').attr('checked')=='1') {

    $('#edit-field-link-to-external-source-0-url-wrapper').show();  
    $('#edit-field-internal-source-0-nid-nid-wrapper').hide();  

    if ($('#edit-field-internal-source-0-nid-nid-wrapper').val()!='') {
       $('#edit-field-link-to-external-source-0-url').attr('disabled','disabled');
    }
  }

else {

    $('#edit-field-internal-source-0-nid-nid-wrapper').show();
    $('#edit-field-link-to-external-source-0-url-wrapper').hide();

    if ($('#edit-field-link-to-external-source-0-url-wrapper').val()!='') {
       $('#edit-field-internal-source-0-nid-nid-wrapper').attr('disabled','disabled');
    }
 
  }
});

});

Аватар пользователя divined divined 7 декабря 2011 в 17:05

для скрытия второго поля в дефолтном состоянии просто перед обработчиком события нажатия вставьте:

$('#edit-field-link-to-external-source-0-url-wrapper').hide();

Аватар пользователя divined divined 7 декабря 2011 в 17:07

if ($('#edit-field-internal-source-0-nid-nid-wrapper').val()!='') {

эта часть кода проверяет заполненость input, но у вас стоит селектор div'а, у него нет значения val().