Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.06.2017, 18:19
ZMA ZMA вне форума
Новичок на форуме
Отправить личное сообщение для ZMA Посмотреть профиль Найти все сообщения от ZMA
 
Регистрация: 09.06.2017
Сообщений: 8

Работа с раскрывающимся списком
Добрый день.

Создан раскрывающийся список средствами JS:

var CheckColor = function myPrice() {
    var x = document.createElement("SELECT");
    x.setAttribute("id", "mySelect");
    document.body.appendChild(x);
 
    var z = document.createElement("option");
    z.setAttribute("color", "green");
    var t = document.createTextNode("Зеленый");
    z.appendChild(t);
    document.getElementById("mySelect").appendChild(z);
    
     var z = document.createElement("option");
    z.setAttribute("color", "red");
    var t = document.createTextNode("Красный");
    z.appendChild(t);
    document.getElementById("mySelect").appendChild(z);
    
    var z = document.createElement("option");
    z.setAttribute("color", "blue");
    var t = document.createTextNode("Синий");
    z.appendChild(t);
    document.getElementById("mySelect").appendChild(z);
    
}

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

Как можно обратиться к атрибуту с цветом из другой функции - направьте, пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 09.06.2017, 18:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

ZMA,
а создать нормальный option никак?
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2017, 12:23
ZMA ZMA вне форума
Новичок на форуме
Отправить личное сообщение для ZMA Посмотреть профиль Найти все сообщения от ZMA
 
Регистрация: 09.06.2017
Сообщений: 8

рони, опции созданы теперь отдельно.

Но в коде что-то не так.
Предполагается, что пользователь вводит 2 значения: высота и ширина. Считается автоматом, без клавиши submit.

Также хотелось бы добавить доп. функцию: при вводе пользователем размера площадью <= 0,4 кв.м. к coefficient автоматом прибавляется 10%. Как понимаю, через через дополнительный if, куда вставить, подскажите.

Кто может, проверьте, помогите, пожалуйста.

var options = [
      {
       value: 'red',
       coefficient: 1,
       text: 'красный'
       },
       {
       value: 'green',
       coefficient: 1.2,
       text: 'зеленый'
       },
       {
       value: 'blue',
       coefficient: 2.5,
       text: 'синий'
       },
       ];
    var output = $('#output');
 
 
    function createOption(obj) {
    var option = document.createElement('option');
    var text = document.createTextNode(obj.text);
    option.appendChild(text);
    option.value = obj.value;
    option.dataset.coefficient = obj.coefficient;
    return option;
    }
 
    function createSelect(obj) {
    var select = document.createElement('select');
    select.id = 'mySelect';
    obj.forEach(function(option) {
    select.appendChild(createOption(option));
    });
    document.body.appendChild(select);
    }
 
    function calculate(height, width, coefficient) {
    return height * width * coefficient;
    }
 
    createSelect(options);
    $('#height, #width, #coefficient').on('keyup', function(){
    var height = $('#height').val() * 1;
    var width = $('#width').val() * 1;
    var select = document.getElementById('mySelect');
    var coefficient = select.options[select.selectedIndex].dataset.coefficient;
        if(!isNaN(height) && !isNaN(width)){
            output.html('Цена: ' + calculate(height * width* coefficient).toFixed(2) + ' руб.');
        } else {
            output.html('Не верный формат!');
        }
        });


<form action="" id="form">
    <input type="text" id="height">
    <input type="text" id="width">
    <ul id="output"></ul>
</form>
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2017, 13:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

калькулятор площади
ZMA,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
  window.addEventListener('DOMContentLoaded', function() {
  var options = [
      {
       value: 1,
       text: 'красный'
       },
       {
       value: 1.2,
       text: 'зеленый'
       },
       {
       value: 2.5,
       text: 'синий'
       }
       ];

 function createOption(obj) {
    return new Option(obj.text, obj.value)
}

function createSelect(obj) {
    var select = document.createElement("select");
    select.id = "mySelect";
    obj.forEach(function(option) {
        select.appendChild(createOption(option))
    });
    return form.insertBefore(select, output)
}

function calculate() {
    var h = +height.value || 0,
        w = +width.value || 0,
        c = +select.value;
    h < 0 && (h = 0);
    w < 0 && (w = 0);
    h = h * w;
    h <= .4 && (c *= 1.1);
    h *= c;
    output.innerHTML = h.toFixed(2)
}
var form = document.querySelector("#form"),
    output = document.querySelector("#output"),
    width = document.querySelector("#width"),
    height = document.querySelector("#height"),
    select = createSelect(options);

form.addEventListener("input", calculate);
form.addEventListener("change", calculate);

      });
  </script>
</head>

<body>
<form action="" id="form" >
    <input type="text" id="height">
    <input type="text" id="width">
    <p id="output"></p>
</form>


</body>
</html>

Последний раз редактировалось рони, 14.06.2017 в 13:43.
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2017, 13:37
ZMA ZMA вне форума
Новичок на форуме
Отправить личное сообщение для ZMA Посмотреть профиль Найти все сообщения от ZMA
 
Регистрация: 09.06.2017
Сообщений: 8

рони, спасибо огромнейшее.
Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2017, 12:05
ZMA ZMA вне форума
Новичок на форуме
Отправить личное сообщение для ZMA Посмотреть профиль Найти все сообщения от ZMA
 
Регистрация: 09.06.2017
Сообщений: 8

рони, можно еще вопрос.
Пытаюсь добавить, чтобы при вводе числа меньше min/max, автоматом происходила замена на min/max число. Причем на w и h min и max разные.
добавляю replace var h= +height.value.replace(/\D/g,'')||0; , if'ы <>, onblur/onchange в input, но безрезультатно.
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2017, 12:58
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ZMA,
Вот же у вас проверка на min
h < 0 && (h = 0);
w < 0 && (w = 0);

Поставьте вместо нулей нужные значения min
Аналогично и по max.
Ну и исправить в инпутах
height.value = h.toString();
width.value  = w.toString();

Последний раз редактировалось Dilettante_Pro, 15.06.2017 в 13:03.
Ответить с цитированием
  #8 (permalink)  
Старый 15.06.2017, 13:04
ZMA ZMA вне форума
Новичок на форуме
Отправить личное сообщение для ZMA Посмотреть профиль Найти все сообщения от ZMA
 
Регистрация: 09.06.2017
Сообщений: 8

Dilettante_Pro, к сожалению, это ограничивает только расчет.
Т.е., если вы установите max 200, а значение будет введено 305, то посчитается как 200, но значение пользователь так и будет видеть 305.
Хотелось бы, чтобы 305 менялось на 200 (установленный max) автоматически.
Ответить с цитированием
  #9 (permalink)  
Старый 15.06.2017, 13:14
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

h < 10 && (h = 10);
w < 20 && (w = 20);
h > 200 && (h = 200);
w > 250 && (w = 250);
height.value = h.toString();
width.value  = w.toString();

Только обработчик на input лучше убрать - не даст ввести изменения в случае ошибки
Ответить с цитированием
  #10 (permalink)  
Старый 15.06.2017, 13:18
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
  window.addEventListener('DOMContentLoaded', function() {
  var options = [
      {
       value: 1,
       text: 'красный'
       },
       {
       value: 1.2,
       text: 'зеленый'
       },
       {
       value: 2.5,
       text: 'синий'
       }
       ];

 function createOption(obj) {
    return new Option(obj.text, obj.value)
}

function createSelect(obj) {
    var select = document.createElement("select");
    select.id = "mySelect";
    obj.forEach(function(option) {
        select.appendChild(createOption(option))
    });
    return form.insertBefore(select, output)
}

function calculate() {
    var h = +height.value || 0,
        w = +width.value || 0,
        c = +select.value;
    h < 10 && (h = 10);
    w < 20 && (w = 20);
    h > 200 && (h = 200);
    w > 250 && (w = 250);
    height.value = h.toString();
    width.value  = w.toString();
    h = h * w;
    h <= 400 && (c *= 1.1);
    h *= c;
    output.innerHTML = h.toFixed(2)
}
var form = document.querySelector("#form"),
    output = document.querySelector("#output"),
    width = document.querySelector("#width"),
    height = document.querySelector("#height"),
    select = createSelect(options);

// form.addEventListener("input", calculate);
form.addEventListener("change", calculate);

      });
  </script>
</head>

<body>
<form action="" id="form" >
    <input type="text" id="height">
    <input type="text" id="width">
    <p id="output"></p>
</form>


</body>
</html>

Последний раз редактировалось Dilettante_Pro, 15.06.2017 в 13:31.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с выпадающим списком osetr Общие вопросы Javascript 1 11.11.2014 20:18
Работа с выпадающим списком (SELECT) Bogus Общие вопросы Javascript 14 11.03.2013 08:39
jQuery. Работа с динамически создаваемым списком. nule jQuery 6 27.12.2011 16:56
jQuery проблемы с раскрывающимся списком teclis jQuery 3 24.08.2010 12:25