Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 09.08.2015, 01:21
Интересующийся
Отправить личное сообщение для apisklov Посмотреть профиль Найти все сообщения от apisklov
 
Регистрация: 12.11.2014
Сообщений: 13

в общем совсем запутался. циклом прошелся, как вы и сказали, но вот не понимаю одно, алерт выводит все значения value по порядку, но как занести в переменную например 14 элемент.
inputs = inputs[i].value
- выводит опять же значение первого инпута.
Ответить с цитированием
  #12 (permalink)  
Старый 09.08.2015, 08:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от apisklov
Подскажите пожалуйста как это сделать.
Это:

<button class="border" onclick="card.addToCard(this, '002', 'Зонт1', '1500', kolvo.value)">Купить</button>

заменить на это:

<button class="border" data-val="'002','Зонт1',1500">Купить</button>

Назначит кнопкам обработчик, в котором получать значения атрибута data-val, добавляя к ним this (текущая кнопка) и значение input в родительском элементе "item", и передавая их как значения аргументов для функции cart.addToCart().
Ответить с цитированием
  #13 (permalink)  
Старый 09.08.2015, 09:29
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от apisklov
но как занести в переменную например 14 элемент.
inputs = inputs[i].value
- выводит опять же значение первого инпута.
вы шутите, или совсем не знакомы с языками программирования?)
inputs[13].value - это значения 14-го элемента.
Ответить с цитированием
  #14 (permalink)  
Старый 09.08.2015, 12:55
Интересующийся
Отправить личное сообщение для apisklov Посмотреть профиль Найти все сообщения от apisklov
 
Регистрация: 12.11.2014
Сообщений: 13

Сообщение от EmperioAf Посмотреть сообщение
inputs[13].value - это значения 14-го элемента.
это я понимаю. просто не правильно выразился.
хотел спросить, как код будет понимать, что сейчас я работаю, например, с 14 элементом и нужно получить его value?
Ответить с цитированием
  #15 (permalink)  
Старый 09.08.2015, 12:57
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от apisklov Посмотреть сообщение
это я понимаю. просто не правильно выразился.
хотел спросить, как код будет понимать, что сейчас я работаю, например, с 14 элементом и нужно получить его value?
if ( i == 13)
    //код работающий с 14-ым элементом
Ответить с цитированием
  #16 (permalink)  
Старый 09.08.2015, 14:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от apisklov
хотел спросить, как код будет понимать, что сейчас я работаю, например, с 14 элементом и нужно получить его value?
Зачем вам засорять элементы нативным обработчиком функций? Сервера задача, это как можно меньший объем данных и как можно более короткий отзыв на запрос. Вы нагружаете сервер задачей, которая как раз должна выполняться клиентом.
Ответить с цитированием
  #17 (permalink)  
Старый 09.08.2015, 18:00
Интересующийся
Отправить личное сообщение для apisklov Посмотреть профиль Найти все сообщения от apisklov
 
Регистрация: 12.11.2014
Сообщений: 13

Спасибо за ответы. На основе всего, что вы мне написали, сделал так
$('button').on('click', numJq);
function numJq(){
			num = $(this).parent().find('input').val();
}


проверяю алертом, получаю правильные значения value.
Теперь еще одна проблема, результат выполнения этой функции (numJq) перенести в функцию
this.addToCart = function(curObj, id, name, price, num)
		{	
			

		id = ( $.isNumeric(id) ) ? "ID" + id.toString() : id;
		var goodieLine = {"id" : id, "name" : name, "price": price, "num" : num, "url" : document.location.href};
		
		
		
		if ($.isEmptyObject(this.DATA))
			{
			this.DATA[id] = goodieLine;	
			this.IDS.push(id);
			}
		else

		
		for(var idkey in this.DATA) 
			
			{
			if($.inArray(id, this.IDS) === -1)
				{
				
				this.DATA[id] = goodieLine;
				this.IDS.push(id)
				
				}
			else	
			if (idkey == id)
				{

				this.DATA[idkey].num += num;
				
				}
			}

которая и добавляет товар в корзину.
Пытался создавать глобальную переменную - не работает.

Полный код, который отвечает за добавление в корзину
$('button').on('click', numJq);



function numJq(){
			num = $(this).parent().find('input').val();
			alert(num);
}



	this.addToCart = function(curObj, id, name, price, num)
		{	
			

		id = ( $.isNumeric(id) ) ? "ID" + id.toString() : id;
		var goodieLine = {"id" : id, "name" : name, "price": price, "num" : num, "url" : document.location.href};
		
		
		
		if ($.isEmptyObject(this.DATA))
			{
			this.DATA[id] = goodieLine;	
			this.IDS.push(id);
			}
		else

		
		for(var idkey in this.DATA) 
			
			{
			if($.inArray(id, this.IDS) === -1)
				{
				
				this.DATA[id] = goodieLine;
				this.IDS.push(id)
				
				}
			else	
			if (idkey == id)
				{

				this.DATA[idkey].num += num;
				
				}
			}


		
		localStorage.setItem(this.cardID, JSON.stringify(this.DATA));
		localStorage.setItem(this.cardID + "_ids", JSON.stringify(this.IDS));
		this.reCalc();
		
		this.renderBasketTable();
		
		
		
		var bird = $("#" + this.cardID + "_bird"); 
		var pos = $(curObj).position();	
		bird.offset({ top: pos.top, left: pos.left});
		bird.html(price);
		
		bird.show();
		
		bird.animate(
				{
				'left': this.widjetPos.left, 
				'top': this.widjetPos.top 
				}
				,
				{
				'duration': 500, 
				complete:  function() 
					{ 
					bird.offset({ top: -300, left: -300});
					}
				});
				
		if (this.CONFIG.showAfterAdd)
			{
			cart.showWinow('bcontainer', 1);
			}
		}


Какие еще варианты есть, не подскажите?
Ответить с цитированием
  #18 (permalink)  
Старый 10.08.2015, 00:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Не нужна функция посредник:

$('button').click(function() {
    $(this).parent().find('input').val() - передаем далее в функцию
})
//или методом .on, но уж тогда делегировать обработку ближайшему общему родителю их родителя
$('selector').on('click', 'button', function() {  
    //передаем далее
})


А куда же делись '002','Зонт1',1500 и откуда этот код: this.addToCart = function(curObj, id, name, price, num), из чего-то выдрано? Чей это this?
Ответить с цитированием
  #19 (permalink)  
Старый 10.08.2015, 07:22
Интересующийся
Отправить личное сообщение для apisklov Посмотреть профиль Найти все сообщения от apisklov
 
Регистрация: 12.11.2014
Сообщений: 13

в оригинале все выглядит так
HTML:
<div class="item border">
		<img src="img/shop/zont1.png" width="200">
		<p><b>Зонт1</b> |  Цена: 1200 руб</p> 
				<div class="sum_but">
					<span class="plus">+</span>
					<input value="1" maxlength="2" name="" id='' type="text" class="mam">
					<span class="minus">-</span>
				</div>
		<button  class="border" onclick="cart.addToCart(this, '001', 'Зонт1', '1200', '')">Купить</button>
	</div>


JS - обработчик:
function WICard(obj)
	{
	this.widjetX = 0;
	this.widjetY = 0;	
	this.widjetObj;
	this.widjetPos;
	this.cardID = "";
	this.DATA = {};
	this.IDS = [];
	this.objNAME = obj;
	this.CONFIG = {};
	this.IMG = "...";
	
	
	this.init = function(widjetID, config)
		{
		this.CONFIG = config || {};
		try {
			this.DATA = JSON.parse(localStorage.getItem(widjetID)); // code to try
			//console.log("TRY - OK");
			if ($.isEmptyObject(this.DATA))
				{
				this.DATA = {};
				}	
					
			} 
			catch (e) 
			{
			this.DATA = {};
			//onsole.log("TRY - BED");
			}	
		try {
			this.IDS = JSON.parse(localStorage.getItem(widjetID + "_ids"));
			if ($.isEmptyObject(this.IDS))
				{
				this.IDS = [];
				}	
			} 
			catch (e) 
			{
			this.IDS = [];
			}	
		//console.log(this.DATA);
		
		this.cardID = widjetID;	
		$("body").append("<div class='bird' id='"+widjetID +"_bird'></div>");	
		this.widjetObj = $("#" + widjetID);
		this.widjetPos = this.widjetObj.position();	
		
		if ($.isEmptyObject(this.DATA))
			{
			this.widjetObj.html("Корзина пуста");
			}
			else
			{
			this.reCalc();	
			this.renderBasketTable();
			}
		
		}
		
/***********************************************************************************************
 * example: onclick="cart.addToCart(this, '2', 'Name of comic 2', '25500')						
 **********************************************************************************************/

	$('button').click(function() {
			num = $(this).parent().find('input').val();
			alert(num);
	})

	this.addToCart = function(curObj, id, name, price, num)
		{	
			
		id = ( $.isNumeric(id) ) ? "ID" + id.toString() : id;
		var goodieLine = {"id" : id, "name" : name, "price": price, "num" : num, "url" : document.location.href};
		
		
		
		if ($.isEmptyObject(this.DATA))
			{
			this.DATA[id] = goodieLine;	
			this.IDS.push(id);
			}
		else

		
		for(var idkey in this.DATA) 
			
			{
			if($.inArray(id, this.IDS) === -1)
				{
				
				this.DATA[id] = goodieLine;
				this.IDS.push(id)
				
				}
			else	
			if (idkey == id)
				{

				this.DATA[idkey].num += num;
				
				}
			}


		
		localStorage.setItem(this.cardID, JSON.stringify(this.DATA));
		localStorage.setItem(this.cardID + "_ids", JSON.stringify(this.IDS));
		this.reCalc();
		
		this.renderBasketTable();
		
		
		
		var bird = $("#" + this.cardID + "_bird"); 
		var pos = $(curObj).position();	
		bird.offset({ top: pos.top, left: pos.left});
		bird.html(price);
		
		bird.show();
		
		bird.animate(
				{
				'left': this.widjetPos.left, 
				'top': this.widjetPos.top 
				}
				,
				{
				'duration': 500, 
				complete:  function() 
					{ 
					bird.offset({ top: -300, left: -300});
					}
				});
				
		if (this.CONFIG.showAfterAdd)
			{
			cart.showWinow('bcontainer', 1);
			}
		}
Ответить с цитированием
  #20 (permalink)  
Старый 10.08.2015, 11:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну во-первых, этот обработчик должен "навешиваться" на что-то, если понимаете что и как, то на что указывает obj при вызове этого плагина?

Тут можно вообще отказаться от данных в кнопке, перенеся из в поле ввода, и немного подправив код плагина, тогда самое поле ввода будет источником всех данных, а функция будет определена в обработчике щелчка кнопки.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при клике использовать предыдущее значения переменной внутри функции akagloomy jQuery 7 29.01.2015 00:37
Преобразование значения переменной в строку leny Общие вопросы Javascript 3 01.10.2011 22:34
изменение значения глобальной переменной внутри функции mgmarket Серверные языки и технологии 14 13.09.2011 00:56
присвоить переменной адрес третей ссылки qwertyuiop Общие вопросы Javascript 1 01.07.2011 00:39