Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как сделать разделение комой при вводе в инпут. (https://javascript.ru/forum/events/75106-kak-sdelat-razdelenie-komojj-pri-vvode-v-input.html)

drakulawz 03.09.2018 13:34

Как сделать разделение комой при вводе в инпут.
 
Всем доброго времени суток. Практикую разные задания по js. Есть такой скрипт:

var val = $('.inp'),    //<input> с введёнными цифрами;
          result = $('.res'); //<p> параграф с результатом;

    $(val).on('focusout', total);   //по потери фокуса выполняется функция по получению среднего арифметического введённых цифр;

    function total() {
        var sum = 0;
        var str = val.val();
        var arr = str.split('');
        for (i = 0; i < arr.length; i++) {
            sum += +arr[i];
        var equal = sum/arr.length;
        }
        result.html(equal);
    }

    $(val).on('focusin', clear);    //по получению фокуса очищается инпут и параграф;

    function clear() {
        val.val('');
        result.html('=');
    }


Всё по заданию сделал, кроме одного: надо сделать разделение вводимых цифр комой. Все задания и (естественно) решения сделаны на нативном js, а я делаю на jQuery. В решении в строке var arr = str.split('') в скобки просто добавили кому, но когда я так делаю в результат выводится введённые значения без изменений. Пожалуйста, подскажите почему так?

рони 03.09.2018 13:50

Цитата:

Сообщение от drakulawz
результат выводится введённые значения без изменений

пример где?

drakulawz 03.09.2018 13:57

Цитата:

Сообщение от рони
пример где?

Какой пример?
Весь код выложил, HTML скинуть ещё?
Или код на js?

рони 03.09.2018 14:22

drakulawz,
что не так?
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
  var val = $('.inp'),    //<input> с введёнными цифрами;
          result = $('.res'); //<p> параграф с результатом;

    $(val).on('focusout', total);   //по потери фокуса выполняется функция по получению среднего арифметического введённых цифр;

    function total() {
        var sum = 0;
        var str = val.val();
        var arr = str.split('');
        for (i = 0; i < arr.length; i++) {
            sum += +arr[i];
        var equal = sum/arr.length;
        }
        result.html(equal);
    }

    $(val).on('focusin', clear);    //по получению фокуса очищается инпут и параграф;

    function clear() {
        val.val('');
        result.html('=');
    }


});
  </script>
</head>

<body>
 <input type="text" class="inp">
<p  class="res"></p>

</body>
</html>

drakulawz 03.09.2018 14:31

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
    <script src="jquery-3.3.1.js"></script>
    <script src="script.js"></script>
</head>

<body>
    <div id="content">
            <input class="inp" type="number" placeholder="number">
            <p class="res">=</p>
    </div>
</body>

</html>


body {
    width: 100%;
    height: 100%;
    margin: 0px;
    padding: 0px;
}

#content {
    width: 200px;
    height: 50px;
    position: relative;
    top: 100px;
    left: 50%;
    transform: translate(-50%, 50%);
    background: #ccc;
    border: 1px solid #000;
    text-align: center;
    padding: 10px;
}

.inp{
    margin: 2px;
}


.res{
    margin: 3px;
}


$(document).ready(function () {

    var val = $('.inp'),    //<input> с введёнными цифрами;
        result = $('.res'); //<p> параграф с результатом;

    $(val).on('focusout', total);   //по потери фокуса выполняется функция по получению среднего арифметического введённых цифр;

    function total() {
        var sum = 0;
        var str = val.val();
        var arr = str.split('');
        for (i = 0; i < arr.length; i++) {
            sum += +arr[i];
        var equal = sum/arr.length;
        }
        result.html(equal);
    }

    $(val).on('focusin', clear);    //по получению фокуса очищается инпут и параграф;

    function clear() {
        val.val('');
        result.html('=');
    }
})


А вот кусок кода на JS - тот, что предлагает решение на сайте с задачей:

var elem = document.getElementById('num');
elem.addEventListener('blur', func);

function func() {
	var sum = 0;
	var str = elem.value;
	var arr = str.split(',');
  	for (var i = 0; i < arr.length; i++) {
		sum += +arr[i];
	}
	var newElem = document.getElementById('result');
	newElem.innerHTML = sum/arr.length;
}

рони 03.09.2018 14:39

drakulawz,
в чём проблема? или что сделать, чтобы обнаружить проблему?

рони 03.09.2018 14:41

drakulawz,
кроме того, что ваш код не рационален в трёх местах, но он рабочий, проблем не вижу.

drakulawz 03.09.2018 14:54

Цитата:

Сообщение от рони
кроме того, что ваш код не рационален в трёх местах

подскажите пожалуйста, в каких местах и почему, для меня это важно, так как я ещё учусь. Хотелось бы не делать лишних телодвижений в будущем.
Цитата:

Сообщение от рони
но он рабочий, проблем не вижу

да, я же говорю, всё работает. Вот только по условию цифры должны разделятся комами. Это условие выполнимо? Или визуально (в самом инпуте) такого никак не добится и я не правильно понял условие?
Само условие:
"Дан инпут. В него вводятся числа через запятую. По потери фокуса найдите среднее арифметическое этих чисел (сумма делить на количество)."

рони 03.09.2018 15:15

drakulawz,
что такое "кома"?

drakulawz 03.09.2018 15:25

Цитата:

Сообщение от рони
что такое "кома"?

...что я могу сказать - редко приходилось употреблять названия всяких знаков препинания на русском. В голове я понимаю, что пишу не правильно, но этого не замечаю даже когда несколько раз проверил текст!:write:
ИЗВИНИТЕ!:D Кома - это запятая по украински. :lol:


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