09.08.2015, 01:21
|
Интересующийся
|
|
Регистрация: 12.11.2014
Сообщений: 13
|
|
в общем совсем запутался. циклом прошелся, как вы и сказали, но вот не понимаю одно, алерт выводит все значения value по порядку, но как занести в переменную например 14 элемент.
inputs = inputs[i].value
- выводит опять же значение первого инпута.
|
|
09.08.2015, 08:32
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от 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().
|
|
09.08.2015, 09:29
|
|
Профессор
|
|
Регистрация: 15.01.2015
Сообщений: 622
|
|
Сообщение от apisklov
|
но как занести в переменную например 14 элемент.
inputs = inputs[i].value
- выводит опять же значение первого инпута.
|
вы шутите, или совсем не знакомы с языками программирования?)
inputs[13].value - это значения 14-го элемента.
|
|
09.08.2015, 12:55
|
Интересующийся
|
|
Регистрация: 12.11.2014
Сообщений: 13
|
|
Сообщение от EmperioAf
|
inputs[13].value - это значения 14-го элемента.
|
это я понимаю. просто не правильно выразился.
хотел спросить, как код будет понимать, что сейчас я работаю, например, с 14 элементом и нужно получить его value?
|
|
09.08.2015, 12:57
|
|
Профессор
|
|
Регистрация: 15.01.2015
Сообщений: 622
|
|
Сообщение от apisklov
|
это я понимаю. просто не правильно выразился.
хотел спросить, как код будет понимать, что сейчас я работаю, например, с 14 элементом и нужно получить его value?
|
if ( i == 13)
//код работающий с 14-ым элементом
|
|
09.08.2015, 14:36
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от apisklov
|
хотел спросить, как код будет понимать, что сейчас я работаю, например, с 14 элементом и нужно получить его value?
|
Зачем вам засорять элементы нативным обработчиком функций? Сервера задача, это как можно меньший объем данных и как можно более короткий отзыв на запрос. Вы нагружаете сервер задачей, которая как раз должна выполняться клиентом.
|
|
09.08.2015, 18:00
|
Интересующийся
|
|
Регистрация: 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);
}
}
Какие еще варианты есть, не подскажите?
|
|
10.08.2015, 00:18
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Не нужна функция посредник:
$('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?
|
|
10.08.2015, 07:22
|
Интересующийся
|
|
Регистрация: 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);
}
}
|
|
10.08.2015, 11:24
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну во-первых, этот обработчик должен "навешиваться" на что-то, если понимаете что и как, то на что указывает obj при вызове этого плагина?
Тут можно вообще отказаться от данных в кнопке, перенеся из в поле ввода, и немного подправив код плагина, тогда самое поле ввода будет источником всех данных, а функция будет определена в обработчике щелчка кнопки.
|
|
|
|