Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Задать количество символов перед номером страницы! (https://javascript.ru/forum/misc/60439-zadat-kolichestvo-simvolov-pered-nomerom-stranicy.html)

Teamur 29.12.2015 21:58

Задать количество символов перед номером страницы!
 
<input type='text' id='zap' maxlength='1'>
<input type='number' id='kol'>
<input type='number' id='page'>
<div id='output'></div>

В первом поле пользователь вводит символ-заполнитель, например: *
Во втором количество таких символов, например: 8
В третьем вводит номер страницы, например: 7

В итоге в div будет:
********7

Вот заготовка скрипта, дальше - без понятия... (
var zap = document.getElementById('zap').value;
var kol = document.getElementById('kol').value;
var page = document.getElementById('page').value;
var output = document.getElementById('output');
???
output.innerHTML = ??? + 'page'

Надеюсь на вашу помощь, товарищи!

Deff 29.12.2015 22:06

<style>
label{
  display:block;
  width:200px;
  text-align:right;
  margin:3px;
}
</style>
<form id=inp style="width:400px">
<label>Заполнитель: <input type='text' id='zap' maxlength='1'/ value='*'></label>
<label>Число символов зап-ия: <input type='number' min=0 id='kol' value='0'/></label>
<label>Номер Страницы: <input type='number' min=1 id='page' value='1'/></label><br>
 <div id='output'></div>
</form>
<script type="text/javascript">
document.querySelector('#inp').oninput=function(){
var zap = document.getElementById('zap').value;
var kol = +document.getElementById('kol').value;
var page = +document.getElementById('page').value;
var output = document.getElementById('output');
var dop='';
for(var i=0;i<kol;i++)dop+=zap.replace(/\s/,'&nbsp;');
output.innerHTML = dop + page;
}
</script>

Teamur 29.12.2015 23:02

А как организовать динамическое изменение результата и без обновления странички?
kol.onchange ?

Deff, а насколько быстр ваш способ?
Вот тут я нашел скрипт для создание префикса перед числом:
http://www.coding4.net/post/prefix-i...avascript.aspx

function PrefInt(number, len) {
   return (Array(len).join('0') + number).slice(-length);
}
document.writeln(PrefInt(79, 4));


Можно ли сюда привязать поле kol. Типа .join('i')
var i = document.getElementById('kol').value;

Если Вас не затруднит, объясните, что лучше по быстродействию. Спасибо

Teamur 29.12.2015 23:18

Просто интересно какие еще могут быть варианты )

Lemme 29.12.2015 23:30

Цитата:

Просто интересно какие еще могут быть варианты )
alert("0".repeat(15));

Teamur 29.12.2015 23:33

Минимализм и быстродействие, вот что нам нужно, правда Lemme )
Lemme, а как теперь вывести эти нули в div без алертов?

Lemme 29.12.2015 23:50

Цитата:

а как теперь вывести эти нули в div без алертов?
<style>
label{
  display:block;
  width:200px;
  text-align:right;
  margin:3px;
}
</style>
<form id=inp style="width:400px">
<label>Заполнитель: <input type='text' id='zap' maxlength='1'/></label>
<label>Число символов зап-ия: <input type='number' id='kol'/></label>
<label>Номер Страницы: <input type='number' id='page'/></label><br>
 <div id='output'></div>
</form>
<script type="text/javascript">
document.querySelector('#inp').oninput=function(){
var zap = document.getElementById('zap').value;
var kol = +document.getElementById('kol').value;
var page = document.getElementById('page').value;
var output = document.getElementById('output');

if(page&&page>0) output.innerHTML = zap.repeat(kol) + page;
}
</script>


На всякий случай, советую обратить внимание на:

https://developer.mozilla.org/en-US/.../String/repeat

Deff 30.12.2015 00:05

Lemme,
Может лучше Array(kol).join(zap)

рони 30.12.2015 00:10

Teamur,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<style>
label{
  display:block;
  width:200px;
  text-align:right;
  margin:3px;
}
</style>
<form id=inp style="width:400px">
<label>Заполнитель: <input type='text' id='zap' maxlength='1'/></label>
<label>Число символов зап-ия: <input type='number' id='kol'/></label>
<label>Номер Страницы: <input type='number' id='page'/></label><br>
 <div id='output'></div>
</form>
<script type="text/javascript">
function PrefInt(number, len, prefix) {
   return (Array(len).join(prefix) + number).slice(-len);
}

document.querySelector('#inp').oninput=function(){
var zap = document.getElementById('zap').value;
var kol = +document.getElementById('kol').value;
var page = +document.getElementById('page').value;
var output = document.getElementById('output');
var dop='';

if(page&&page>0)output.innerHTML = PrefInt(page, kol, zap);
}
</script>

</body>

</html>

Teamur 30.12.2015 00:16

Рони, при изменении числа символов должно быть (дб) динамическое изменение на выходе количества единиц заполнителя. Спасибо.

Если что - акцент на последние версии браузеров, другими словами (дс) полифилы пока не нужны. И как в данном примере по быстродействию? )

Lemme 30.12.2015 00:20

Deff, хух, отредактировал, а я то думаю, либо меня уже выключает, либо что-то не то=) Сидел мозг себе выносил=)

мб и лучше, хотя чем?

p.s я лишь показал очередной вариант =)
Цитата:

Просто интересно какие еще могут быть варианты )

рони 30.12.2015 00:25

Цитата:

Сообщение от Teamur
Рони, при изменении числа символов должно быть (дб) динамическое изменение на выходе единиц заполнителя. Спасибо.

не осилил

Deff 30.12.2015 00:28

Teamur,
1. Думаю однократный скрипт ?
2. Array(n) чуть быстрее repeat (По крайней мере в XP в Опере, мозилле, Хроме, если посмотреть, он на базе Array построен)

Teamur 30.12.2015 00:30

Deff, многократный.
По поводу репита, со временем наверное будут оптимизации, ведь это новая технология...!
И вообще вместо ручного ввода количества символов заполнителя можно использовать колесо мыши!
Крутанул вверх -> звездочек стало больше и наоборот...
Так вот в связи с этим встает вопрос быстродействия.

Lemme 30.12.2015 00:33

Deff, windows 8.1, chrome. Других браузеров под видной нету(

Цитата:

for (var i=0;i<5;i++){console.time(i);console.log("0".repea t(5));console.timeEnd(i);}
VM498:2 00000
VM498:2 0: 0.357ms
VM498:2 00000
VM498:2 1: 0.318ms
VM498:2 00000
VM498:2 2: 0.330ms
VM498:2 00000
VM498:2 3: 0.239ms
VM498:2 00000
VM498:2 4: 0.620ms
undefined

for (var i=0;i<5;i++){console.time(i);console.log(Array(5). join(0));console.timeEnd(i);}
VM499:2 0000
VM499:2 0: 0.566ms
VM499:2 0000
VM499:2 1: 0.340ms
VM499:2 0000
VM499:2 2: 0.313ms
VM499:2 0000
VM499:2 3: 0.307ms
VM499:2 0000
VM499:2 4: 0.269ms
undefined
Хотя этот console.time такой console.time :D

Deff 30.12.2015 00:35

Цитата:

Сообщение от Lemme
мб и лучше, хотя чем?

Ну думал не пристёгиваться к ECMAScript 6

Lemme 30.12.2015 00:37

Deff, разве что так =)

Deff 30.12.2015 00:38

Цитата:

Сообщение от Teamur
По поводу репита, со временем наверное будут оптимизации, ведь это новая технология...!

Cогласен, вона у Lemme,
У мну он на базе Array

рони 30.12.2015 00:39

Lemme, на всякий
либо repeat 4 либо Array 6 :)

Lemme 30.12.2015 00:40

рони, да эт ясно, просто лень было менять цифры, на результат то не повлияет :D

Deff 30.12.2015 00:42

Ксать поставил начальные занчения в input - меньше проверок
И да, чот с пробелами у мну не получилось (пробовал заменять на &nbsp;(zap.replace(/\s/,'&nbsp;')) - один фиг
Получилось с \s
========================================

/Блин бесит, хотел к НГ АPI доделать к своему ресурсу, ДДосят гады второй день!(страдаю тут фигнёй)/

Lemme 30.12.2015 00:49

Deff, пострадать фигней - иногда тоже полезно =)

рони 30.12.2015 02:50

http://javascript.ru/forum/misc/1158...u-nulyami.html

Deff 30.12.2015 02:54

рони,
:D О, не уж то мы такие старые на этом сайте ??
Ужс, я думал хоть на этом менее 4 лет... ужос

Teamur 30.12.2015 21:58

Спасибо всем за ответы! С Новым Годом, товарищи! ))


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