Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   зависимая видимость (https://javascript.ru/forum/events/41864-zavisimaya-vidimost.html)

lukasss 02.10.2013 12:32

зависимая видимость
 
Подскажите, как реализовать такое:

есть fiedlset, в нем поля - по умолчанию с display:none.
Как сделать, чтобы если хотя бы одно поле стало видимым то и fieldset - тоже стал видимым иначе fielset - display:none;

Заранее спасибо

danik.js 02.10.2013 12:34

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

lukasss 02.10.2013 12:38

поля в fieldset становятся видимыми в зависимости от других полей-списков вне этого fielset. Но почему-то не хотелось бы завязывать на этом.
Возможно ли организовать событие которое срабатывает когда хотя бы одно поле внутри fieldset становиться видимым. Как это записать на jquery?

danik.js 02.10.2013 12:41

$(anyElement).trigger('anyevent');
// ..
$(anyElement).on('anyevent', function() {
  anyAction();
});

lukasss 02.10.2013 12:55

не совсем понимаю что в моем случае будет anyevent

lukasss 02.10.2013 13:17

if ($('anyElement:hidden').length) { 
      $('#fieldset').css({ 'display': 'none' });    
    } else {
      $('#fieldset').css({ 'display': 'block' });
    }


но не могу понять в какое событие это засунуть

lukasss 02.10.2013 13:54

в моём случае всегда $('anyElement:hidden').length - false почему?

danik.js 02.10.2013 13:57

anyElement - это any element (любой элемент)

lukasss 02.10.2013 14:06

это понятно. Подскажите вот что:


if ($('anyElement:hidden').length) {... я так понимаю, что если элемент будет в display:none, то он будет в наборе, а lenght считает сколько их, и по нему можно определить скрывать или не скрывать. Почему у меня во всех случаях условие в if выполняется? даже когда нет скрытых?

danik.js 02.10.2013 15:33

Цитата:

Сообщение от lukasss
это понятно.

Не похоже :)
Вместо anyElement нужно подставить свой селектор :)

рони 02.10.2013 16:07

danik.js,
Цитата:

Сообщение от lukasss
Возможно ли организовать событие которое срабатывает когда хотя бы одно поле внутри fieldset становиться видимым. Как это записать на jquery?

несмотря на ваш код сильно сомневаюсь что такое возможно - немоглибы вы живой пример написать - некий Observer нужен по моему

sotik 06.10.2013 19:03

Не стал новую тему заводить...
Есть вот такой вот массив:
var krug = ["Фа","До","Соль","Ре","Ля","Ми","Си"];

Есть форма,в которой задается количество знаков и два переключателя- диез и бемоль.
Как в зависимости от состояния переключателя вывести нужное количество нот?
Например,переключатель стоит "диез" и 2 знака,
Значит выводим сначала массива, то есть "Фа", "До".
Если же положение "бемоль" и количество стоит тоже 2, то выводим"Си", "Ми".
Последовательность именно такая.

рони 06.10.2013 19:25

sotik,
:-?
function get(n,d)
{
    var krug = ["Фа","До","Соль","Ре","Ля","Ми","Си"];
    d ==  "бемоль" && krug.reverse();
    return krug.splice(0, n)
}
alert(get(2));
alert(get(2, "бемоль"));

sotik 06.10.2013 20:34

Спасибо большое.
Можно пояснить 4 и 5 строчку?
Как я понимаю: Если d=="bemol", то переворачиваем массив,так? просто для меня несколько необычная форма условия.
А в 5 сроке соединяем вроде как нужное кол-во элементов массива?
Как грамотно сказать?

рони 06.10.2013 21:27

sotik,
Цитата:

slice
Возвращает подмассив (часть исходного массива).

sotik 06.10.2013 23:15

Хорошо.А как вернуть массив в исходное состояние в случае его переворачивания(после return конечно же) ?

рони 06.10.2013 23:21

Цитата:

Сообщение от sotik
А как вернуть массив в исходное состояние в случае его переворачивания

а цель?

sotik 07.10.2013 01:05

Потому что в другой функции код работает с оригинальным массивом:
//Соответствие с тональностью
if(radios[2].value=="Не соотносить с апликатором"){
if(k>0){
if(krug.indexOf(alt)<k && radios[0].checked)valton++;
if(krug.indexOf(alt)>6-k && radios[1].checked)valton--;
}
}

Переменная alt - это элемент массива;
Переменная k - количество знаков.

рони 07.10.2013 01:24

sotik,
и как ваш код связан с моим?

sotik 07.10.2013 05:36

Очень просто.
В нашу функцию мы попадаем из формы когда меняем знаки,а из нее в функцию обработки ноты:
Если знаки не меняются,то основная функция(обработки ноты) работает с исходным массивом krug.
var id = "e";
document.onclick = function( e ){
//Соответствие с тональностью
if(radios[2].value=="Не соотносить с апликатором"){
if(k>0){
if(krug.indexOf(alt)<k && radios[0].checked)valton++;
if(krug.indexOf(alt)>6-k && radios[1].checked)valton--;
}
}
}
//функция обработки знаков
...
document.getElementById(id).click();

рони 07.10.2013 09:21

Цитата:

Сообщение от sotik
Очень просто.

:blink:

BETEPAH 07.10.2013 11:05

Цитата:

Сообщение от sotik
просто для меня несколько необычная форма условия

я бы сказал, не очевидная ;)
рони, взял в арсенал
:thanks:

рони 07.10.2013 11:16

BETEPAH, на всякий случай
присвоение только надо оборачивать в скобки при такой записи a == s && (b = 1)


Часовой пояс GMT +3, время: 09:47.