Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Веб-программирование > DHTML, JavaScript, VBScript
Перезагрузить страницу Элемент для ввода чисел и чисел с плавающей точкой
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
videomag videomag вне форума
Member
 
Сообщений: 136
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2009
По умолчанию Элемент для ввода чисел и чисел с плавающей точкой - 23.08.2012, 23:31

есть такой элемент:
— Number
Элемент для ввода чисел и чисел с плавающей точкой. Могут вводиться только цифры.
Свойства:
prefix (значение до числа, которое постоянно присутствует в элементе)
suffix (значение после числа)
decimals (точность, кол-во знаков после запятой, может быть 0, вводим целые числа)
min (минимальное значение, учитывая точность, пример: для целых чисел «0», для чисел с плавающей точкой «0.001»)
max (максимальное значение)
single_step (шаг увеличения/уменьшения значения числа при нажатии на кнопочки, пример: «1.001»)
value (текущее значение элемента)
Symbols: arrows/none (стрелочки вверх/вниз)

Элемент практически готов, нужна помощь в проверке текстового поля. По кнопкам всё работает, но надо чтоб в ручном когда вводил цифры префикс и суффикс нельзя было изменить, меняется только число. А так же при вводе числа выходящего за пределы, нажимаемая цифра уже не прописывалась.
В Хроме, IE работает, букву ввести нельзя, также вводиться только одна точка, вторую тоже нельзя, а вот в Опере без проблем вводится буква, что может быть?
И кстати не работает передвижение курсора с клавы, а также кнопка Делете.
Уже все перепробовал, помогите кто чем может...

HTML Код:
<style type="text/css">
div#div_number {
    float: left;
    margin: 0;
}
.button {
    font-size: 60%;
    width: auto;
    height: 20px;
    text-align: -15px;
    margin-left: -1px;
    margin-top: -1px;
 }
input#number {
    border: 1px solid #696;
    padding: 0px 0;
    text-align: center;
    font-size: 140%;
    line-height:30px;
    height: 37px;
    width: 250px;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;
    background: #FFFFFF;
    background: -webkit-gradient(linear, 0 0, 0 bottom, from(#FFFFFF), to(#C7E8BB));
    background: -webkit-linear-gradient(#FFFFFF, #C7E8BB);
    background: -moz-linear-gradient(#FFFFFF, #C7E8BB);
    background: -ms-linear-gradient(#FFFFFF, #C7E8BB);
    background: -o-linear-gradient(#FFFFFF, #C7E8BB);
    background: linear-gradient(#FFFFFF, #C7E8BB);
    -pie-background: linear-gradient(#FFFFFF, #C7E8BB);
</style>

<!--
prefix   - çíà÷åíèå äî ÷èñëà, êîòîðîå ïîñòîÿííî ïðèñóòñòâóåò â ýëåìåíòå;
suffix   - çíà÷åíèå ïîñëå ÷èñëà;
decimals - çàäàåòñÿ àòðèáóòîì single_step, êîë. çíàêîâ â äðîáíîé ÷àñòè è áóäåò òî÷íîñòüþ;
min  - ìèíèìàëüíîå çíà÷åíèå;
max      - ìàêñèìàëüíîå çíà÷åíèå;
single_step - øàã óâåëè÷åíèÿ/óìåíüøåíèÿ çíà÷åíèÿ ÷èñëà ïðè íàæàòèè íà êíîïî÷êè;
value    - òåêóùåå çíà÷åíèå ýëåìåíòà;
symbols  - arrows/none îòîáðàæàòü/íåò ñòðåëî÷êè ââåðõ/âíèç;
//-->

<!--Íà÷àëî áëîêà Number //-->
<div id="div_number">
<input type="text" name = "number" onkeydown="nodigital()" onclick="nodigital()" id="number" prefix = "äî" suffix = "ïîñëå" single_step = "1.000003" max = "25" min = "15" symbols = "none1" value="20"></div>
<div id="td_up"><input type="button" class="button" onClick="f(-1)" value=▲></div>
<div id="td_down"><input type="button" class="button" onClick="f(1)" value=▼></div>
<!--Êîíåö áëîêà Number//-->
<div id="tem1"></div>
<div id="tem2"></div>
<script type="text/javascript">

var a = document.getElementById('number');
if (a.getAttribute('symbols')=='none'){
document.getElementById("td_up").style.visibility = "hidden";
document.getElementById("td_down").style.visibility = "hidden";
}
var temp = a.value;
a.value = a.getAttribute('prefix')+" "+temp+" "+a.getAttribute('suffix');
if (navigator.appName!='Microsoft Internet Explorer') {
inp = document.createElement('input');
inp.type = 'hidden';
inp.name = 'number2';
inp.id = 'number2';
inp.value = temp;
document.getElementById("div_number").appendChild(inp);
} else {
document.getElementById('div_number').innerHTML = document.getElementById('div_number').innerHTML+'<input type="hidden" name="number2" id="number2" value ='+temp+'>';
}
function f(zn) {  
var a = document.getElementById('number');
var b = document.getElementById('number2');
var st = a.getAttribute('single_step')
var s = b.value - st * zn;
if (s >= a.min && s <= a.max) {
b.value = Math.round(s*1000000)/1000000;
a.value = a.getAttribute('prefix')+" "+b.value+" "+a.getAttribute('suffix');
}
}
function nodigital(){
var a = document.getElementById('number');
cursorPos = getCaret(document.getElementById('number'))
var lp = ((/^[0-9,'.']+$/.test(a.value.charAt(cursorPos-1)) || /^[0-9,'.']+$/.test(a.value.charAt(cursorPos))) && cursorPos!=0); // öèôðà/òî÷êà ïåðåä êóðñîðîì
var p = /^[0-9,'.']*$/.test(a.value.charAt(cursorPos));   // öèôðà/òî÷êà ïîñëå êóðñîðà
var d = (event.keyCode > 47 && event.keyCode < 58);         // íàæàëè öèôðó
var t = a.value.indexOf('.')!=-1;
var tkey = event.keyCode == 190;                         // åñòü ëè òî÷êà
document.getElementById("tem1").innerHTML = (event.keyCode+" "+lp+" "+d+" "+tkey) ;
document.getElementById("tem2").innerHTML = (event.keyCode+" "+ tkey);
if(!lp || !d && !tkey || !d && t) {
event.returnValue=false;
event.preventDefault();
return false;
}
}
 
function getCaret(el) {
  if (el.selectionStart) {
    return el.selectionStart;
  } else if (document.selection) {
    el.focus();  
    var r = document.selection.createRange();
    if (r == null) {
      return 0;
    }  
    var re = el.createTextRange(),
        rc = re.duplicate();
    re.moveToBookmark(r.getBookmark());
    rc.setEndPoint('EndToStart', re);
    return rc.text.length;
  }  
  return 0;
}
</script>
Ответить с цитированием
  (#2 (permalink)) Старый
videomag videomag вне форума
Member
 
Сообщений: 136
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2009
По умолчанию 25.08.2012, 19:31

Может кто-то помочь?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно разобрать программу для перевода списка арабских чисел в список римских чисел. RuslanTM Prolog 2 18.12.2011 17:04
Из множества целых чисел 1..100 выделить множество чисел, являющихся, в свою очере Tormiz61 Pascal 4 18.06.2011 15:07
В массиве из 25 вещественных чисел найти наименьший элемент imported_Дмитрий74 Visual Basic 0 19.04.2011 17:17
Как написать программу для ввода целых чисел на С++ Sys13 Вопросы начинающих программистов 6 12.10.2009 21:08
Задача с плавающей точкой evgeni Форум программистов 2 25.02.2009 23:46
Элемент список целых чисел помножить на квадрат... mel Prolog 2 25.04.2007 12:26
Суммирование чисел с плавающей точкой oh Вопросы начинающих программистов 3 24.01.2007 17:32
Как понять - double - с плавающей точкой с двойной точностью goga0881 С/С++ 3 20.03.2006 18:16
Формат представления чисел с плавающей точкой в .NET imported__Sergey_ Вопросы начинающих программистов 4 17.09.2005 10:04
Как считать из Label число с плавающей точкой imported_Надежда Вопросы начинающих программистов 1 08.03.2005 13:06
Экстремум последовательности ввода чисел в строку Alex Friend Алгоритмы 4 10.11.2004 16:05
Операции с плавающей точкой Timson С/С++ 1 06.03.2004 19:35



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов