Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   события клавиш (https://javascript.ru/forum/dom-window/51163-sobytiya-klavish.html)

sloyi 27.10.2014 09:27

события клавиш
 
Ребят есть такой код.

$('.input-col').keypress(function (){
var lal, zaz, ends;
//достаем значение дива
lal = document.getElementById('cartsum_id').innerHTML;
//удаляем все пробелы и все знаки кроме чисел и естественно переводим его в интеджер
zaz = parseInt(lal.replace(/\D/g,''));
//Вычитаем ))
ends = 5000 - zaz;
//дальше идет вывод
if(ends > 0)
	{
	document.getElementById('ewe-tovar').innerHTML = 'Для бесплатной доставки добавьте к заказу еще товаров на '+ ends+ ' руб.' ;
	document.getElementById('price-dostavka').innerHTML = '300 руб.' ;
	}
else
	{
	document.getElementById('ewe-tovar').innerHTML = '' ;
	document.getElementById('price-dostavka').innerHTML = 'Бесплатно' ;
	}

});


Вопрос заключается в следующем. Код впринцапе все выводит и выводит ответ правильно но почему то за паздывает. Например вводиш в интуп число "1" он молчит вводиш в интуп число "2" он выдает то что должно было быть при том как ты ввел число 1 т.е. работает на второе нажати а не на первое и кейап и кейпресс и кейдав =DDD выводит одинаково в чем может быть причина? (а если вставляеш вместо этого кода алерт то выводит правильно при первом же нажатии)

ksa 27.10.2014 09:39

Цитата:

Сообщение от sloyi
в чем может быть причина?

Ты не сделал полного тестового примера... Т.ч. х/з чего там у тебя...

sloyi 27.10.2014 09:52

<input class=" input-col" type="text" value="Первый инпут" name="" >
<input class=" input-col" type="text" value="Второй инпут" name="" >


<div class='cartsum_id'> 2 457 руб.</div>

<div id='price-dostavka'></div>
<div id='ewe-tovar'></div>


$('.input-col').keypress(function (){
	var lal, zaz, ends;
	//достаем значение дива
	lal = document.getElementById('cartsum_id').innerHTML;
	//удаляем все пробелы и все знаки кроме чисел и естественно переводим его в интеджер
	zaz = parseInt(lal.replace(/\D/g,''));
	//Вычитаем ))
	ends = 5000 - zaz;
	//дальше идет вывод
	if(ends > 0)
	    {
	    document.getElementById('ewe-tovar').innerHTML = 'Для бесплатной доставки добавьте к заказу еще товаров на '+ ends+ ' руб.' ;
	    document.getElementById('price-dostavka').innerHTML = '300 руб.' ;
	    }
	else
	    {
	    document.getElementById('ewe-tovar').innerHTML = '' ;
	    document.getElementById('price-dostavka').innerHTML = 'Бесплатно' ;
	    }
	 
	});


Ну вроде все если что то еще не хватает скажите дополню)))) но вроде как все написал

danik.js 27.10.2014 09:53

Цитата:

Сообщение от sloyi
достаем значение дива

А зачем ты его при каждом событии достаешь? Оно что, изменяется? Если изменяется то когда?

sloyi 27.10.2014 10:00

<div class='cartsum_id'> 2 457 руб.</div>


Изменяеться этот див. он изменяться и при изменение инпутов этих и есть еще парочку событий при которых этот див изменяеться. и вот мне надо сделать чтоб когда нажимаеш на кклавишу происходило событие.

sloyi 27.10.2014 10:01

блин ну и построил конечно я предложение ))))

ksa 27.10.2014 10:03

Цитата:

Сообщение от sloyi
но вроде как все написал

У меня вообще ничего не происходит при редактировании инпутов...

<!DOCTYPE html>
<html>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function (){
	$('.input-col').keypress(function (){
		var lal, zaz, ends;
		//достаем значение дива
		lal = document.getElementById('cartsum_id').innerHTML;
		//удаляем все пробелы и все знаки кроме чисел и естественно переводим его в интеджер
		zaz = parseInt(lal.replace(/\D/g,''));
		//Вычитаем ))
		ends = 5000 - zaz;
		//дальше идет вывод
		if(ends > 0) {
			document.getElementById('ewe-tovar').innerHTML = 'Для бесплатной доставки добавьте к заказу еще товаров на '+ ends+ ' руб.' ;
			document.getElementById('price-dostavka').innerHTML = '300 руб.' ;
		} else {
			document.getElementById('ewe-tovar').innerHTML = '' ;
			document.getElementById('price-dostavka').innerHTML = 'Бесплатно' ;
		};
		 
	});
});
</script>
</head>
<body>
<input class=" input-col" type="text" value="Первый инпут" name="" >
<input class=" input-col" type="text" value="Второй инпут" name="" >
<div class='cartsum_id'> 2 457 руб.</div>
<div id='price-dostavka'></div>
<div id='ewe-tovar'></div>
</body>
</html>

Ошибка...

Unhandled Error: Cannot convert 'document.getElementById('cartsum_id')' to object

danik.js 27.10.2014 10:04

Т.е. у тебя на странице есть другой скрипт, который тоже слушает событие keypress или input.

Значит проблема в порядке обработки этого события. Получается так что твой обработчик вызывается первым.

danik.js 27.10.2014 10:09

Самый простой и топорный фикс: заюзать нулевой setTimeout.

В идеале же ты не должен парсить всякие дивы. Получается тупо ведь:
твой скрипт подсчитывает сумму и вставляет ее в div, форматируя.
И следом же твой второй скрипт парсит ее из дива, через регулярку. В реале конечно так приходится делать, если скрипты написаны через жопу, и не имеют API.

ksa 27.10.2014 10:11

Цитата:

Сообщение от sloyi
<div class='cartsum_id'> 2 457 руб.</div>


Изменяеться этот див.

А в своем скрипте ты обращаешся к нему по ИД...


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