Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выборка элементов querySelectorAll (https://javascript.ru/forum/events/71107-vyborka-ehlementov-queryselectorall.html)

Nlk 27.11.2017 17:05

Nexus,
всё понял, спасибо большое!

Nlk 28.11.2017 11:03

Скажите пожалуйста. Всё равно не получается скрыть скролл во время открытого popup окна. В чём может быть причина..
html, body{
	min-height: 100%;
}
body {
	font: 100%/1.5em Lato, sans-serif; 
	background-color: #f3f3f3;
	position: relative;
	border: 5px solid #c6faf7;
}
.body-hide-scroll{
	overflow: hidden !important;
}

/*Popup*/
#nav-overlay.nav-active {
	opacity: 1;
    visibility: visible;
}
#nav-overlay {
	opacity: 0;
    visibility: hidden;
	position: fixed;
    top: 0;
	left: 0;
    height: 100%;
	width: 100%;
	z-index: 3;
    background-color: black;
}

Nlk 28.11.2017 11:07

.body-hide-scroll соответственно назначается body после открытия popup-окна, и то что он успешно присваивается нет сомнений, но при этом ничего не происходит скролл остается на месте.

Nexus 28.11.2017 11:56

Nlk, это точно скролл "body"?

Nlk 28.11.2017 12:59

Nexus,
Popup-окно у меня становиться во весь размер сайта соответственно размер body наверно или html документа. Самому popup-окну я тоже добавлял overflow: hidden но никакого эффекта.

Nlk 28.11.2017 13:01

Или возможно вы имели в виду вложенность данного popup-окна. Да у меня есть родитель данного элемента тег header - он почти без стилей..

Nlk 28.11.2017 13:03

Видимо родителем данного элемента должен быть напрямую body?!

Nlk 28.11.2017 13:07

Попробовал всё равно не хочет работать..

Nexus 28.11.2017 13:53

Nlk, https://jsfiddle.net/Leudp6hm/

Nlk 28.11.2017 14:03

Nexus,
В вашем примере всё прекрасно работает, очередной раз низкий поклон. Буду разбираться где у себя напортачил.

Nlk 28.11.2017 15:13

Блин, разобрался в чём была проблема, reset от Eric Meyer
html {
    overflow-y: scroll;
}

Вот и думай стоит их использовать..

Nlk 03.12.2017 02:12

Ребят, объясните пожалуйста, почему в данном цикле получаем результат 110, это связано с сложением строк и чисел?
function bin (num) {
	var res = ""; 
	while(num>0) {
		res=num%2; 
		num=Math.floor(num/2);
		} 
	return res; 
} 
document.write(bin(6))

Nexus 03.12.2017 11:05

Nlk, у меня результатом вашего кода получается ни что иное как единица.
Конвертировать число в другую СС можно так:
alert((6).toString(2));//6 hex to bin

Nlk 03.12.2017 12:37

Nexus, извините в примере была ошибка, обновил данные.. Не могу понять почему единица у меня выходит 0 при первом цикле res=6%2+"" ведь равняется 0?
function bin (num) { 	
  var res = ""; 	
  while(num>0) { 		
    res=num%2+res; 	//обновлено
    num=Math.floor(num/2); 		
  } 	
  return res; 
} 
document.write(bin(6))

Nexus 04.12.2017 09:47

Nlk, обратите внимание на то, как у вас формируется результат.
Строка 4: остаток от деления num на 2 вставляется не в конец строки, а в начало.

Nlk 04.12.2017 10:14

Nexus,
Блиин, вроде такой простой пример, а тупил очень долго. Спасибо

Nlk 12.12.2017 15:20

Здравствуйте! Подскажите пожалуйста, хочу сделать постраничную прокрутку сайта. Никак не могу придумать как это реализовать лучше. Не знаю как отловить событие скрола, было ли оно сделано наверх или вниз. Есть вот такое стандартное начало:
document.addEventListener("scroll", myFunction);
function myFunction() {
    var scrolled = window.pageYOffset || document.documentElement.scrollTop;
	scrolled
}

Может можно замыкание сделать чтоб сравнить с предыдущим scrolled, или весь scrolled закидывать в массив и потом сравнивать с предыдущим значением, если больше значит вниз скрол если меньше значит наверх.

Nexus 12.12.2017 15:24

Nlk, на jq (принцип должен быть понятен):
var last_scroll_top=0;
$('html,body').scroll(function(){
    var sTop=$(this).scrollTop();
    if(sTop<last_scroll_top)
        alert('to top');
    else
        alert('...');
});

Taichi 12.12.2017 17:42

Вопрос по теме querySelectorAll, но с другим уклоном.
Подскажите, а почему в данном наброске, все элементы NodeList'a пустые??
<input type='number' min='1' name='aa' style='width:100%' >
<input type='number' min='1' name='aa' style='width:100%' >
<input type='number' min='1' name='aa' style='width:100%' >
<input type='number' min='0' name='bb' style='width:100%'  onchange="suma();">

<p id="demo"></p>

<script>
function suma()
{
     var aa = document.querySelectorAll('input[name="aa"]');
     for (var i = 0; i < aa.length; i++) {
     document.getElementById("demo").innerHTML = "Results =" +
aa[i].innerHTML;
      
  }
}

Nexus 12.12.2017 17:54

Taichi, в строке 14 замените "innerHTML" на "value".

Dilettante_Pro 12.12.2017 18:02

Taichi,
Цитата:

Сообщение от Nexus
в строке 14 замените "innerHTML" на "value".

Кроме того, в цикле каждый следующий aa затирает результат предыдущего.

Taichi 12.12.2017 18:10

Посему мне подсказали записывать переменные чезез aa[], что бы через цикл добраться до каждого. Спасибо большое, ошибка мелкая а проблем много.

Nexus 12.12.2017 18:12

Taichi, Dilettante_Pro имел ввиду, что изменяя свойство "innerHTML", элемента #demo в строке 13 вы постоянно перезаписываете контент этого поля.

Taichi 12.12.2017 18:21

Задача предстоит такая:
var aa = document.querySelectorAll('form.intake input[name="aa[]"]'),
	       bb = document.querySelectorAll('form.intake input[name="bb[]"]');

Мне нужно каждый инпут аа[] умножить на инпут bb[], и вывести в инпут сс[], а потом все результаты сложить в переменную FullPay.
И все это в динамике, так как инпуты можно как добавлять так и удалять.
function FullPay()
{
     var aa = document.querySelectorAll('form.intake input[name="aa[]"]'),
	       bb = document.querySelectorAll('form.intake input[name="bb[]"]');
	 alert(aa);
     for (var i = 0; i < aa.length; i++) {
		 cc[i] = aa[i]*bb[i];
		 document.getElementById("cc[]").innerHTML = "Results =" + cc[i].value
  }
}
$('form.intake').on('input', 'click','input[name="aa[]"], input[name="bb[]"]', FullPay);

но что то, я чувствую, не осилю сам =(

Taichi 12.12.2017 19:19

function FullPay()
{
     var aa = document.querySelectorAll('form.intake input[name="aa[]"]'),
	        bb = document.querySelectorAll('form.intake input[name="bb[]"]'),
			cc = document.querySelectorAll('form.intake input[name="cc[]"]'),
			FullPay = document.querySelector('.FullPay');
     for (var i = 0; i < aa.length; i++) {
		 cc[i].value = (+aa[i].value||0) * (+bb[i].value||0);
	     FullPay.innerHTML += +cc[i].value;
  }
}


Вот, уперся в проблему, точнее две.
Не могу сделать так что бы переменная сс[i] заходила в тот инпут который нужно, выходит только со смещением, то есть выводит сумму в последний инпут сс[].

И еще, не выходит правильно сложить результат в FullPay.
Подскажите, что куда и как правильно?

рони 12.12.2017 20:01

Taichi,
function FullPay()
{
     var aa = document.querySelectorAll('form.intake input[name="aa[]"]'),
          bb = document.querySelectorAll('form.intake input[name="bb[]"]'),
      cc = document.querySelectorAll('form.intake input[name="cc[]"]'),
      full  = document.querySelector('.FullPay'),
      sum = 0;
     for (var i = 0; i < aa.length; i++) {
     cc[i].value = (+aa[i].value||0) * (+bb[i].value||0);
       sum += +cc[i].value;
  };

   full.innerHTML = sum
}

Taichi 12.12.2017 20:09

Вложений: 1
Я выносил тоже переменную из цикла, но у меня не заработало. И ваш пример у меня, чего то, не работает:(

Прикрепил скрин формы.

рони 12.12.2017 20:14

Цитата:

Сообщение от Taichi
И ваш пример у меня, чего то, не работает

не телепат :)

Taichi 12.12.2017 20:19

Вложений: 1
Сейчас, поднастрою антенну для телепатии, а то действительно слабо передает.

Прикрепил скин формы для варианта:
function FullPay()
{
     var aa = document.querySelectorAll('form.intake input[name="aa[]"]'),
	        bb = document.querySelectorAll('form.intake input[name="bb[]"]'),
			cc = document.querySelectorAll('form.intake input[name="cc[]"]'),
			full = document.querySelector('.FullPay');
     for (var i = 0; i < aa.length; i++) {
		 cc[i].value = (+aa[i].value||0) * (+bb[i].value||0);
	     full.innerHTML += parseInt (+cc[i].value);
  }
}

Taichi 12.12.2017 20:21

Не знаю, почему, но если объявить какую то переменную опосля
FullPay = document.querySelector('.FullPay');

Скрипт, как будто бы теряет его из памяти. :blink:

рони 12.12.2017 20:27

Taichi,
не называйте одинаково функции и переменные!!!
function FullPay()
{
var aa = document.querySelectorAll('form.intake input[name="aa[]"]'),
bb = document.querySelectorAll('form.intake input[name="bb[]"]'),
cc = document.querySelectorAll('form.intake input[name="cc[]"]'),
FullPay = document.querySelector('.FullPay');
for (var i = 0; i < aa.length; i++) {
cc[i].value = (+aa[i].value||0) * (+bb[i].value||0);
FullPay.innerHTML += parseInt (+cc[i].value);
}
}

рони 12.12.2017 20:31

Taichi,
пост №66 исправил

Nlk 13.12.2017 10:06

Цитата:

Сообщение от Nexus
Nlk, на jq (принцип должен быть понятен):

var last_scroll_top=0;
$('html,body').scroll(function(){
    var sTop=$(this).scrollTop();
    if(sTop<last_scroll_top)
        alert('to top');
    else
        alert('...');
});

А каким образом обновляются данные у переменной last_scroll_top не отображено ?!

рони 13.12.2017 10:09

Цитата:

Сообщение от Nlk
не отображено ?!

а самому добавить в строке 8
...= ...

Nlk 13.12.2017 12:21

рони,
Возможно так?
var last_scroll_top=0;
$('html,body').scroll(function(){
    var sTop=$(this).scrollTop();
    if(sTop<last_scroll_top)
        alert('to top');
    else
        alert('...');

last_scroll_top = sTop; // таким образом?

});

Nexus 13.12.2017 12:26

Nlk, да.

Nlk 13.12.2017 12:42

Nexus,рони,

Спасибо!

Nlk 13.12.2017 13:00

Где то ошибся?
document.addEventListener("scroll", myFunction);
var lastScrolled = 1;
function myFunction() {
    var scrolled = window.pageYOffset || document.documentElement.scrollTop;
	var scrolledThis = this.scrolled;
	if (scrolledThis < lastScrolled) {
		alert("TOP");
	} else {
		alert("BOTTOM");
	}
	lastScrolled = scrolledThis;
}

Nexus 13.12.2017 13:05

document.addEventListener("scroll", myFunction);

var lastScrolled = 1;
function myFunction() {
    var scrolled = window.pageYOffset || document.documentElement.scrollTop;
    if (scrolled < lastScrolled) {
        alert("TOP");
    } else {
        alert("BOTTOM");
    }
    lastScrolled = scrolled;
}

Nlk 13.12.2017 13:13

Nexus,
какое счастье, работает) Буду 'крутить' далее, спасибо.


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