Обработка формы form (input) событием onchange

Статус
Закрыто для дальнейших ответов.

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Здравствуйте. Пытаюсь понять основы JS.
Не могу решить задачу: Хочу cделать чтото типа калькулятора - в форме (input) пользователь вводит число, а сразу под формой выводится результат функции работающей с этим числом...(т.е даже к серверу не надо обращаться)

Я предполагаю, что это так будет:

Код:
<input type="text" name="pole1" id="pole1"  onChange="__?__">
Блин, и не знаю как обьяснить, что функции javascript надо работать с числом взятым из input.

p.s: А вообще сысл этого калькулятора перевести пиксели в сантиметры, при заданной dpi. Если с этим разберусь, то и сделаю, чтоб и dpi можно выбрать было...
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
в onChange надо прописать ссылку на функцию в скрипте
в ней нужно взять значение поля
Код:
var pix = document.getElementById('pole1').value;
далее идут ваши расчеты
потом надо вывести результат, для этого под полем должен быть некий контейнер для вывода результата, допустим с id="result"
Код:
var res = document.getElementById('result');
res.innerHTML = сюда вставить значение вычислений + 'см'
 
  • Like
Реакции: vla

Aristotel

Well-Known Member
Регистрация
14.04.2011
Сообщения
213
не очень понял что вы хотите сделать.onChange это событие, например когда есть изменение то срабатывает какая либо функция :

<input type="text" name="pole1" id="pole1" onchange="XXX()">

а дальше в скриптах надо
function XXX(){
var x = document.getElementById('pole1').value;}

x это то с чем работать
 
  • Like
Реакции: vla

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
[member=lekzd], спасибо завтра попробую, сообщу че получилось. Как я понял:
Код:
onChange="return f_calculator();"
а в функции:
Код:
function f_calculator() {
var pix = document.getElementById('pole1').value;
// далее вычисления с переменной "pix"
И еще вопрос: Можно обойтись тегом <input> без тега <form>? это корректно? ведь мне не надо передавать результат...

[member=Aristotel], в первую очередь я хочу понять как передавать значения из input в скрипт и из скрипта обратно в html. А сделать хочу похожую тему, как в фотошопе ({изображение}->{размер изображения}). Там вводишь число в одном поле, он выдает сразу в другом поле пропорциональное значение.
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
он выдает сразу в другом поле пропорциональное значение.
onChange срабатывает только после того как фокус с элемента убран (вы кликнули вне элемента) для подсчета "на лету" советую onKeyPress

onChange="return f_calculator();"
только без return

да, форма нужна только для отправки на сервер
 
  • Like
Реакции: vla

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Не могу научиться выводить информацию, фиг с ней с фунцкцией. Никак не справлюсь с задачей:
Взять из формы через onKeyPress передать в функцию и вывести на страницу
Код:
<HEAD>
<script type="text/javascript">
<!--
function f_calculator() {
var pixx;
var pixx = document.getElementById("i01").value;
return pixx;
}
//-->
</script>
</HEAD>

<BODY>
<input name="i01" id="i01" onKeyPress="f_calculator();">
<p>
<script type="text/javascript">
<!--
var cmm = f_calculator();
document.write (cmm);
//-->
</script>
</p>
</BODY>
первые шаги даются не легко... помогите советом.
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
я же вот вам объяснял про вывод
потом надо вывести результат, для этого под полем должен быть некий контейнер для вывода результата, допустим с id="result"
Код:
var res = document.getElementById('result'); res.innerHTML = сюда вставить значение вычислений + 'см'
вставить надо вместо
а document.write отработает только на старте
 
  • Like
Реакции: vla

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
у меня получилось! )))
[member=lekzd], onKeyPress пришлось заменить на onKeyUp.




В итоге:
html
Код:
<HEAD>
<link type="text/css" href="css/calculator.css">
<script type="text/javascript" src="js/calculator.js"></script>
</HEAD>
<BODY>
<div class="calculator">
<table>
<tr>
  <td><input type="text" name="i01" id="i01" onKeyUp="f_calculator();">&nbsp;дюйм</td>
  <td><div class="result" id="i02">&nbsp;</div>пиксель</td>
</tr>
</table>
</div>
</BODY>
calculator.js
Код:
function f_calculator() {
var p01 = document.getElementById("i01").value;
p01 = 300*p01
var p02 = document.getElementById("i02"); p02.innerHTML = p01
}
calculator.css
Код:
div.calculator,div.calculator input{font-family:monospace,"Lucida Console",Monaco;font-weight:normal;font-size:14px;}
div.calculator input,#i02{background-color:#fff;border:1px solid #ccc;width:10em;height:1em;margin:1px;padding:1px;}
#i02{float:left;}
Теперь встал вопрос: Как вставить результат не в <DIV>, а в поле другого <INPUT> (поле с пикселями). Чтобы можно было вводить в любое поле значение, а в противоположном появлялся результат...
 

motek

злой как @
Регистрация
13.04.2010
Сообщения
730
у меня получилось! )))
[member=lekzd], onKeyPress пришлось заменить на onKeyUp.


В итоге:
html
Код:
<HEAD>
<link type="text/css" href="css/calculator.css">
<script type="text/javascript" src="js/calculator.js"></script>
</HEAD>
<BODY>
<div class="calculator">
<table>
<tr>
  <td><input type="text" name="i01" id="i01" onKeyUp="f_calculator();">&nbsp;дюйм</td>
  <td><div class="result" id="i02">&nbsp;</div>пиксель</td>
</tr>
</table>
</div>
</BODY>
calculator.js
Код:
function f_calculator() {
var p01 = document.getElementById("i01").value;
p01 = 300*p01
var p02 = document.getElementById("i02"); p02.innerHTML = p01
}
calculator.css
Код:
div.calculator,div.calculator input{font-family:monospace,"Lucida Console",Monaco;font-weight:normal;font-size:14px;}
div.calculator input,#i02{background-color:#fff;border:1px solid #ccc;width:10em;height:1em;margin:1px;padding:1px;}
#i02{float:left;}

html
Код:
<HEAD>
<link type="text/css" href="css/calculator.css">
<script type="text/javascript" src="js/calculator.js"></script>
</HEAD>
<BODY>
<div class="calculator">
	<label title="дюйм" for="i01">дюйм</label><input type="text" name="i01" id="i01" onKeyUp="f_calculator();"/>
	<label title="пиксель">пиксель</label><span class="result" id="i02">&nbsp;</span>
</div>
</BODY>
 
  • Like
Реакции: vla

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Код:
<label title="дюйм" for="i01">дюйм</label><input type="text" name="i01" id="i01" onKeyUp="f_calculator();"/>
<label title="пиксель">пиксель</label><span class="result" id="i02">&nbsp;</span>
А как вводить в первом поле тогда, чтото не могу понять...
 

motek

злой как @
Регистрация
13.04.2010
Сообщения
730
Код:
<label title="дюйм" for="i01">дюйм</label><input type="text" name="i01" id="i01" onKeyUp="f_calculator();"/>
<label title="пиксель">пиксель</label><span class="result" id="i02">&nbsp;</span>
А как вводить в первом поле тогда, чтото не могу понять...
что значит как вводить? ручками :) можно нажать на слово "дюйм" - и фокус переместится в инпут
 

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
что значит как вводить? ручками можно нажать на слово "дюйм" - и фокус переместится в инпут
первое поле не активно! можно ввести только во втором (в первом результат)...
 

motek

злой как @
Регистрация
13.04.2010
Сообщения
730
что значит как вводить? ручками можно нажать на слово "дюйм" - и фокус переместится в инпут
первое поле не активно! можно ввести только во втором (в первом результат)...
:laugh: так поменяй их местами...ты css-ку переделал?...убери #i02{float:left;}
 

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
убери #i02{float:left;}
Это не принципиально...

[member=motek], у меня и до этого все работало: вводишь цифры в первый, результат в втором.

А я хочу сделать: вводишь в любое поле цифры, в оставшемся результат. (соответственно, вводишь в первое - срабатывает одна функция, во второе - другая{типа обратная})

Есть возможность передать результат в value input'a?
<input value="__как сюда вставить текст из функции javascripr?__">
 

Aristotel

Well-Known Member
Регистрация
14.04.2011
Сообщения
213
document.getElementById("id vashego inputa").value = 'to chto nado vstavit'';
 
  • Like
Реакции: vla

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Сделано, как хотел! Спасибо всем!
 

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
а поделится? нам тоже интересно
Конечно, не вопрос!
калькулятор - вот страница с калькулятором, видок у него правда щас не лучший, но работает )))
http://nng10.ru/js/calculator.js - JavaScript
http://nng10.ru/css/calculator.css - CSS, может тоже пригодится

PS: НУ И ТАМ НЕ ПОДПИСАНО ПОКА - ПЕРВОЕ ДЛИНА, ВТОРОЕ ШИРИНА...
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
калькулятор - вот страница с калькулятором, видок у него правда щас не лучший, но работает )))
Теперь "шлифуем" его:
  • Добавляем parseFloat() для проверки введенного числа чтобы в полях не было NaN при расчете
  • Округляем пикселы до целого числа при помощи Math.round()
  • Округляем дюймы до сотых при помощи этой функции
  • Так же неплохо ввести предустановки по форматам бумаги в выпадающем списке (A4,A3), при выборе которых поля с сантиметрами заполнялись бы автоматически
 
  • Like
Реакции: vla

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Теперь "шлифуем" его
[member=lekzd], полностью с тобой согласен по всем пунктам! Ты прям читаешь мои мысли!
И еще один пункт: запятую воспринимать как точку - это удобно для пользователя...

Буду дорабатывать на следующей неделе...
 
Статус
Закрыто для дальнейших ответов.
Верх Низ