Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Цифры буквами! Готовый скрипт. (https://javascript.ru/forum/dom-window/33376-cifry-bukvami-gotovyjj-skript.html)

filosofer 21.11.2012 09:46

Цифры буквами! Готовый скрипт.
 
Вот готовый скрипт для отображения слов вместо цифр:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
<script>
var cifir_ru= new Array("од","дв","три","четыр","пят","шест","сем","восем","девят");
var sotN_ru=new Array("сто","двести","триста","четыреста","пятьсот","шестьсот","семьмот","восемьсот","девятьсот");
var milion_ru=new Array("триллион","миллиард","миллион","тысяч");
var anDan_ru =new Array("","","","сорок","","","","","девяносто");

function SPR(x){
var sumprop = new SPRU(x);
document.form1.check.value=sumprop.XS
}

function SPRU(XS){
(XS>0? this.XS=sumPROPRU(Math.floor(XS),Math.round((XS-Math.floor(XS))*100)) : this.XS="Нулевое значение!" );
return this;
}

function sumPROPRU(xx,xx1){
var scet=4;
var cifR='';
var cfR='';
var oboR=new Array(0);
//==========================
	if (xx>999999999999999) { cfR="Густо!"; return cfR; }
	while(xx/1000>0){
		yy=Math.floor(xx/1000);
		delen=Math.round((xx/1000-yy)*1000);
		//-------------------------------
		sot=Math.floor(delen/100)*100;
		des=(Math.floor(delen-sot)>9?Math.floor((delen-sot)/10)*10:0);
		ed=Math.floor(delen-sot)-Math.floor((delen-sot)/10)*10;
		//-------------------------------
		forDes=(des/10==2?'а':'')
		forEd=(ed==1?'ин': (ed==2?'е':'') );
		ffD=(ed>4?'ь': (ed==1 || scet<3? (scet<3 && ed<2?'ин': (scet==3?'на': (scet<4? (ed==2?'а':( ed==4?'е':'')) :'на') ) ) : (ed==2?'а':( ed==4?'е':'') ) ) );
		forTys=(des/10==1? (scet<3?'ов':'') : (scet<3? (ed==1?'': (ed>1 && ed<5?'а':'ов') ) : (ed==1?'а': (ed>1 && ed<5?'и':'') )) );
		//===============================
			oprSot=(sotN_ru[sot/100-1]!=null?sotN_ru[sot/100-1]:'');
			oprDes=' '+(cifir_ru[des/10-1]!=null? (des/10==1?'': (des/10==4 || des/10==9?anDan_ru[des/10-1]:(des/10==2 || des/10==3?cifir_ru[des/10-1]+forDes+'дцать':cifir_ru[des/10-1]+'ьдесят') ) ) :'');
			oprEd=' '+(cifir_ru[ed-1]!=null? cifir_ru[ed-1]+(des/10==1?forEd+'надцать' : ffD ) : (des==10?'десять':'') );
			oprTys=' '+(milion_ru[scet]!=null && delen>0 ?milion_ru[scet]+forTys:'');
		//-------------------------------
		cifR=(oprSot.length>1?oprSot:'')+
			 (oprDes.length>1?oprDes:'')+
             (oprEd.length>1?oprEd:'')+
			 (oprTys.length>1?oprTys:'');
		oboR[oboR.length]=cifR;
		xx=Math.floor(xx/1000);
		scet-=1;
		if ( Math.floor(xx)<1 ) {	break;	}
	}
		oboR.reverse();
		for (i=0; i<oboR.length; i++){
			cfR+=oboR[i]+' ';
		}
		(cfR.length<3?cfR='ноль ':cfR);
		cfR+='рублей '+xx1+' копеек';
		return cfR.replace('  ',' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
</script>
</head>
<body>
<form name=form1 onsubmit="SPR(document.form1.summ.value); return false;">
<table width=100% >
<tr><td align=center valign=middle>
<h1>Введите сумму</h1>
<br><br>
<input name=summ type=text value="5"> 
<br><br>
<input type=button name=ru value='    Показать    ' onclick="SPR(document.form1.summ.value)">
<br>
<br>
<input name=check type=text> 
</form>
</table>
</body>
</html>

Скрипт написан не мной, да и от куда он у меня взялся, тоже не могу припомнить... Вопрос состоит в следующем:
Как сделать выполнение скрипта без кнопки?
Например:
<html>
<head>
<script>
..... // здесь сам скрипт
</script>
</head>
<body>
<input name=summ type=text value="5"> <!-- Здесь вносится значение -->
<span id="check"> </span> <!-- Здесь выводится результат -->
</body>
</html>

ksa 21.11.2012 10:27

Цитата:

Сообщение от filosofer
Как сделать выполнение скрипта без кнопки?

Ловить события возможного изменения поля и выполнять функцию...

filosofer 21.11.2012 10:32

Цитата:

Сообщение от ksa (Сообщение 217022)
Ловить события возможного изменения поля и выполнять функцию...

Спасибо за быстрый ответ ksa!:) Но очень хотелось бы посмотреть как это выглядит в коде. Я ещё очень "зелен" в javascript.

ksa 21.11.2012 10:43

Цитата:

Сообщение от filosofer
очень хотелось бы посмотреть как это выглядит в коде

Что-то типа такого...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function test(Val) {
	document.getElementById('check').innerHTML=Val;
};
</script>
</head>
<body>
<input name=summ type=text value="" onkeyup='test(this.value)' onchange='test(this.value)' />
<p id="check"></p>
</body>
</html>

filosofer 21.11.2012 10:55

Спасибо за ответ!=) Не могу пока тебе карму плюсануть, так как в прошлый раз, тоже именно ты мне помог...

filosofer 21.11.2012 11:20

Цитата:

Сообщение от ksa (Сообщение 217029)
Что-то типа такого...

Я понимаю, что уже, наверное, достал я... Но мне интересно ещё как бы сделать так, чтобы результат выдавался сразу из значения value, на случай, если он уже заполнен. Т.е. из твоего примера результат выходит, только после нажатия на клавиатуре, а как сделать, чтобы он сразу выходил из значения value?
И, пожалуйста, не "закидывайте камнями" меня за, наверное, элементарный вопрос...

ksa 21.11.2012 13:15

Цитата:

Сообщение от filosofer
а как сделать, чтобы он сразу выходил из значения value?

Как вариант...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function test(Val) {
	document.getElementById('check').innerHTML=Val;
};
</script>
</head>
<body onload='test(document.getElementById("summ").value)'>
<input name='summ' id='summ' type=text value="123" onkeyup='test(this.value)' onchange='test(this.value)' />
<p id="check"></p>
</body>
</html>

filosofer 21.11.2012 14:34

Спасибо! Спасибо! Спасибо! Спасибо! Спасибо! Спасибо! Спасибо! Спасибо! Спасибо! Спасибо! :dance:


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