21.07.2016, 13:48
|
Интересующийся
|
|
Регистрация: 20.07.2016
Сообщений: 18
|
|
Вот собственно результат. Напомню что сайт на платформе Ucoz
|
|
21.07.2016, 19:04
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 456
|
|
JimHudson,
<select name="region" onchange="regionChange(this)">
<option value="0">Выберите регион доставки</option>
<option value="300">Красноярский край</option>
<option value="200">Ленинградская область</option>
<option value="200">Московская область</option>
<option value="300">Омская область</option>
<option value="650">Другой</option>
</select>
<script>
function regionChange(region) {
alert(region.value);
}
</script>
|
|
21.07.2016, 19:23
|
Интересующийся
|
|
Регистрация: 20.07.2016
Сообщений: 18
|
|
спасибо огромное, но проблема еще не решена.последнии три строчки моей функции
if($('input[name="custom_delivery_tax"]').length == 0
$('#checkout-form').append('<input type="hidden" name="custom_delivery_tax" value="0">');
}
$('input[name="custom_delivery_tax"]').val(cost);
добавляют числовой результат в общую стоимость заказа.
как мне их применить? нужно решение без alert.
и как функцию js подключить из внешнего файла?
|
|
22.07.2016, 06:43
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
ТС, ты зачем мозг насилуешь? Тебе всего-то надо заменить несколько переменных по одному всего лишь признаку. Сделай таблицу цен по рыгионам и подставляй нужный объект, ты мужик или не мужык?
var costs={},
Cost; /* выбранный регион */
costs.msk={
name:Мозгва,
0:970,
1:100,
12:300,
31:0
};
costs.nsk={
name:Новосибирск
0:670,
1:200,
12:500,
31:0
};
/* продолжай копипастить и менять цены по дням для рыгиона */
costs.spb={
name:Питербурх
0:170,
1:600,
12:600,
31:1
};
Cost=costs.msk; /* дефаульт сити */
Теперь делаешь список
var html=[];
for(var item in costs)
html.push('<option value="'+key+'"'+((costs[key]===Cost)?' selected':'')+'>'+costs[key].name+'</option>';
some_elem.innerHTML='<select>'+html.join('')+'</select>';
some_elem.addEventListener('change',calc);
Теперь калькируешь
var calc=function(e){
/* если есть такой регион, то взять, иначе в мозгву, или какой-то дефольт */
var region = (costs.hasOwnProperty(this.value))?costs[this.value]:costs.msk
/* в var today; номер дня, если не твой день, то дефолт */
Cost = region.hasOwnProperty(today)?cost[today]:cost[0];
};
Всенах.
Последний раз редактировалось warren buffet, 22.07.2016 в 07:01.
|
|
22.07.2016, 06:47
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
ЗЫ. Таблица ненормальна, но тут уловки: номер дня - это число, значит топоним можно заеписать через текстовый ключ, прямо в отношение и вторая - нулевого дня не бывает, поэтому дефолт в пишется в 0, кроме того к 0 эволюционируют все пустые значения.
|
|
22.07.2016, 07:50
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Заделал рабочий прототип
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="utf-8">
</head>
<body>
<div><input type="text" id="day" value="1"/></div>
<br/>
<div id="list"></div>
<br/>
<button id="btn">Посчитать</button>
<br/>
<div id="result"></div>
<script>
var costs={},
today,
Cost;
costs.msk={
name:'Мозгва',
'0':970,
'1':100,
'12':300,
'31':0
};
costs.nsk={
name:'Новосибирск',
'0':670,
'1':200,
'12':500,
'31':0
};
costs.spb={
name:'Питербурх',
'0':170,
'1':600,
'12':600,
'31':1
};
var html=[];
for(var key in costs)
html.push('<option value="'+key+'"'+(costs[key]===Cost?' selected':'')+'>'+costs[key].name+'</option>');
document.getElementById('list').innerHTML='<select>'+html.join('')+'</select>';
var calc=function(e){
/* если есть такой регион, то взять, иначе в мозгву, или какой-то дефольт */
var region = (costs.hasOwnProperty(this.value))?costs[this.value]:costs.msk
today=document.getElementById('day').value;
Cost = region.hasOwnProperty(today)?region[today]:region[0];
};
var show=function(){
document.getElementById('result').innerHTML='<p>Сегодня цена доставки: '+Cost + ' руб.';
};
document.getElementById('btn').addEventListener('click',show);
list.querySelector('select').addEventListener('change',calc);
today=document.getElementById('day').value;
Cost=costs.msk[today]; /* дефаульт сити */
</script>
</body>
</html>
|
|
22.07.2016, 10:45
|
Интересующийся
|
|
Регистрация: 20.07.2016
Сообщений: 18
|
|
warren buffet,
спасибо, опять не то. меня по ходу никто не понял. ты есть вконтакте? скинь в личку ссылку
|
|
22.07.2016, 10:58
|
Интересующийся
|
|
Регистрация: 20.07.2016
Сообщений: 18
|
|
Вот исходная функция.
var myCalculator = function(day){
// стоимость доставки
var cost = 0;
switch(day) {
// каждое первое число месяца стоимость равна 100у.е.
case 1: cost = 100; break
// каждое двенадцатое число месяца стоимость равна 200у.е.
case 12: cost = 200; break
// каждое тридцать первое число месяца доставка бесплатна (таких дней всего 7 в году)
case 31: cost = 0; break
// по остальным дням мы не так щедры, доставка 500у.е.
default: cost = 500;
}
// если поле custom_delivery_tax не существует
if($('input[name="custom_delivery_tax"]').length == 0){
// добавить его
$('#checkout-form').append('<input type="hidden" name="custom_delivery_tax" value="0">');
}
// запись стоимости доставки в поле custom_delivery_tax
$('input[name="custom_delivery_tax"]').val(cost);
}
она считает стоимость доставки в зависимости от дня месяца.
мне необходимо ее переделать, чтобы она считала стоимость в зависимости от региона.
например:
в функции прописать
регион 1, регион 2, регион 3= 200руб
регион 4, регион 5 =300 руб
регион 6 = 400 руб
и т.д.
за счет <select> создаем динамический список регионов.
покупатель выбирает свой регион из списка, а скрипт сравнивает соответствие регион-стоимость и выводит покупателю стоимость доставки, плюс прибавляет ее к общей стоимости. Роль прибавления стоимости выполняют три последние строки исходной функции.
комментарии написанные в исходной функции динамим, они для расчета по дням, нам нужно по регионам.
вот. попытался подробно изложить. сейчас поищу пример уже готовой задумки.
|
|
22.07.2016, 11:37
|
Интересующийся
|
|
Регистрация: 20.07.2016
Сообщений: 18
|
|
Rise,
с юкозом имел дело?
|
|
|
|