05.04.2017, 17:41
|
Интересующийся
|
|
Регистрация: 03.04.2017
Сообщений: 10
|
|
Проверка вводимых символов input
Здравствуйте!
Прошу помощи в следующем вопросе!!!
Есть поле input куда вводиться числовое значение, при вводе любимого значение кроме цифр, оно заменяется на нуль. Проблема в том, что не совсем удобно получается когда пытаешься убрать нуль, он возвращается. Заменить его можно только выделение и вводом другого числа. Если эту проверку убрать, то при пустом поле или символьном значение выводиться NaN.
Возможно ли как то оставить проверку только при окончание ввода значения?
Прошу прощения если криво объяснил.
Ниже код
function isright(obj)
{
if (obj.value>999) obj.value=999;
if (obj.value<1) obj.value=0;
}
<td><div class ="input-style-calc"/><input type="number" min="0" max="999999" value="0" name="days" id="days" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this);"/></div></td>
<td><span style="font-size: 14px;" id="result_ls">0</span> руб.</td>
|
|
05.04.2017, 18:03
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
<td><div class ="input-style-calc"/><input type="number" min="0" max="999" value="0" name="days" id="days" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this);" onchange=" isright(this);"/></div></td>
<td><span style="font-size: 14px;" id="result_ls">0</span> руб.</td>
<script>
function isright(obj)
{
if (obj.value>999) obj.value=999;
if (obj.value<1) obj.value='';
result_ls.innerText = (obj.value == '') ? '0' : obj.value;
}
</script>
Последний раз редактировалось Dilettante_Pro, 05.04.2017 в 18:57.
|
|
05.04.2017, 18:21
|
Интересующийся
|
|
Регистрация: 03.04.2017
Сообщений: 10
|
|
то при пустом поле или символьном значение выводиться NaN.
При таком варианте будет выводиться значение NaN.
|
|
05.04.2017, 18:25
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
zoomx25,
Сообщение от zoomx25
|
то при пустом поле или символьном значение выводиться NaN.
|
Куда выводится?
|
|
05.04.2017, 18:31
|
Интересующийся
|
|
Регистрация: 03.04.2017
Сообщений: 10
|
|
При пустом значение Комплект RTK Ровер RTK Тахеометр
выводиться NaN
Вот полный код
<script type="text/javascript">
function cal(){
var result = document.getElementById('result')
var days=document.getElementById('days').value
var days2=document.getElementById('days2').value
var days3 = document.getElementById('days3').value
var days4 = document.getElementById('days4').value
var days5 = document.getElementById('days5').value
var value = document.getElementById('rtk_complectId').value
var value2 = document.getElementById('rtk_roverId').value
var value3 = document.getElementById('taheomId').value
var rtk_complect_r;
var rtk_rover_r;
var taheom_r;
days=parseFloat(days)
days2=parseFloat(days2)
days3=parseFloat(days3)
days4=parseFloat(days4)
days5=parseFloat(days5)
var r_ls=0
var r_p_gps=0
var rtk_complect_r=0
var rtk_rover_r=0
var taheom_r=0
var price=0
if (days==0) {r_ls=0;}
else if (days<=3) { r_ls=75000;}
else if (days<=7) { r_ls=days*25000;}
else if (days<=14) { r_ls=days*21000;}
else if (days<=30) { r_ls=days*18000;}
else if (days>=31) { r_ls=days*15000;}
if (days2==0) {r_p_gps=0;}
else if (days2<=3) { r_p_gps=5400;}
else if (days2<=7) { r_p_gps=days2*1800;}
else if (days2<=14) { r_p_gps=days2*1500;}
else if (days2<=30) { r_p_gps=days2*1200;}
else if (days2>=31) { r_p_gps=days2*1000;}
if (value == "rtk_uhf") {
if (days3==0) {rtk_complect_r=0;}
else if (days3<=3) { rtk_complect_r=18000;}
else if (days3<=7) { rtk_complect_r=days3*6000;}
else if (days3<=14) { rtk_complect_r=days3*5000;}
else if (days3<=30) { rtk_complect_r=days3*4500;}
else { rtk_complect_r=days3*4000;}
}
else if (value == "rtk_gsm") {
if (days3==0) {value=0;}
else if (days3<=3) { rtk_complect_r=16500;}
else if (days3<=7) { rtk_complect_r=days3*5500;}
else if (days3<=14) { rtk_complect_r=days3*4500;}
else if (days3<=30) { rtk_complect_r=days3*4000;}
else { rtk_complect_r=days3*3500;}
}
if (value2 == "rtk_gps") {
if (days4==0) {rtk_rover_r=0;}
else if (days4<=3) { rtk_rover_r=6900;}
else if (days4<=7) { rtk_rover_r=days4*2300;}
else if (days4<=14) { rtk_rover_r=days4*2000;}
else if (days4<=30) { rtk_rover_r=days4*1700;}
else { rtk_rover_r=days4*1500;}
}
else if (value2 == "rtk_gps_glonass") {
if (days4==0) {rtk_rover_r=0;}
else if (days4<=3) { rtk_rover_r=10500;}
else if (days4<=7) { rtk_rover_r=days4*3500;}
else if (days4<=14) { rtk_rover_r=days4*3000;}
else if (days4<=30) { rtk_rover_r=days4*2500;}
else { rtk_rover_r=days4*2200;}
}
if (value3 == "tah_na_otrzh") {
if (days5==0) {taheom_r=0;}
else if (days5<=3) { taheom_r=4500;}
else if (days5<=7) { taheom_r=days5*1500;}
else if (days5<=14) { taheom_r=days5*1100;}
else if (days5<=30) { taheom_r=days5*900;}
else { taheom_r=days5*800;}
}
else if (value3 == "tah_bez_6_5") {
if (days5==0) {taheom_r=0;}
else if (days5<=3) { taheom_r=6600;}
else if (days5<=7) { taheom_r=days5*2200;}
else if (days5<=14) { taheom_r=days5*1800;}
else if (days5<=30) { taheom_r=days5*1600;}
else { taheom_r=days5*1400;}
}
if (value3 == "tah_bez_2_1") {
if (days5==0) {taheom_r=0;}
else if (days5<=3) { taheom_r=8100;}
else if (days5<=7) { taheom_r=days5*2700;}
else if (days5<=14) { taheom_r=days5*2300;}
else if (days5<=30) { taheom_r=days5*2100;}
else { taheom_r=days5*1900;}
}
else if (value3 == "tah_robot") {
if (days5==0) {taheom_r=0;}
else if (days5<=3) { taheom_r=13500;}
else if (days5<=7) { taheom_r=days5*4500;}
else if (days5<=14) { taheom_r=days5*4000;}
else if (days5<=30) { taheom_r=days5*3500;}
else { taheom_r=days5*3000;}
}
price=r_ls+r_p_gps+rtk_complect_r+rtk_rover_r+taheom_r;
if (result.value) {
price = parseInt(price.value);
}
document.getElementById("result_ls").innerHTML=r_ls;
document.getElementById("result_p_gps").innerHTML=r_p_gps;
document.getElementById('summ_rtk_complect').innerHTML = rtk_complect_r;
document.getElementById('summ_rtk_rover_r').innerHTML = rtk_rover_r;
document.getElementById('summ_taheom_r').innerHTML = taheom_r;
result.innerHTML = price;
}
function isright(obj)
{
if (obj.value>999) obj.value=999;
if (obj.value<1) obj.value=0;
}
</script>
</head>
<body>
<h1>Калькулятор</h1>
<form id="form1" name="form1" method="post" action="">
<table width="896" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="341"><p>Лазерный сканер</p>
<p> </p></td>
<td width="199"><input type="number" min="0" max="999999" value="0" name="days" id="days" onkeyup="this.value=this.value.replace(/[^0-9]+/g,'');"/></td>
<td width="158">результат</td>
<td width="148"><span id="result_ls">0</span> руб.</td>
</tr>
<tr>
<td><p>Приемник GPS (Статика L2)</p>
<p> </p></td>
<td><input type="number" min="0" max="999999" value="0" name="days2" id="days2" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this);"/></td>
<td>результат</td>
<td><span id="result_p_gps">0</span> руб.</td>
</tr>
<tr>
<tr>
<td><p>Комплект RTK
</p>
<p>
<select size="1" id="rtk_complectId" onChange="cal()">
<option value="rtk_uhf">UHF 35W</option>
<option value="rtk_gsm">GSM/GPRS</option>
</select>
</p>
</td>
<td><input type="number" min="0" max="999999" value="0" name="days3" id="days3" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this);"/></td>
<td>результат</td>
<td><span id="summ_rtk_complect">0</span> руб.</td>
</tr>
<tr>
<tr>
<td><p>Ровер RTK
</p>
<p>
<select size="1" id="rtk_roverId" onChange="cal()">
<option value="rtk_gps">GPS</option>
<option value="rtk_gps_glonass">GPS/Glonass</option>
</select>
</p>
</td>
<td><input type="number" min="0" max="999999" value="0" name="days4" id="days4" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this);" /></td>
<td>результат</td>
<td><span id="summ_rtk_rover_r">0</span> руб.</td>
</tr>
<tr>
<td><p>Тахеометр
</p>
<p>
<select size="1" id="taheomId" onChange="cal()">
<option value="tah_na_otrzh">На отрожатель</option>
<option value="tah_bez_6_5">Безотрожательный (6";5")</option>
<option value="tah_bez_2_1">Безотрожательный (2";1")</option>
<option value="tah_robot">Роботизированный</option>
</select>
</p>
</td>
<td><input type="number" min="0" max="999999" value="0" name="days5" id="days5" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this);"/></td>
<td>результат</td>
<td><span id="summ_taheom_r">0</span> руб.</td>
</tr>
<tr>
<td colspan="2"><p>
</p>
<p>
<input type="button" name="button" id="button" onClick="cal()" value="вычислить" />
</p>
<p> </p></td>
<td>Итого</td>
<td><span id="result">0</span> руб.</td>
</tr>
</table>
</form>
<p> </p>
</body>
</html>
|
|
05.04.2017, 18:55
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
zoomx25,
Посмотрите измененный пост 2
|
|
05.04.2017, 21:20
|
Интересующийся
|
|
Регистрация: 03.04.2017
Сообщений: 10
|
|
Вот что получается (((
Последний раз редактировалось zoomx25, 05.04.2017 в 21:24.
|
|
06.04.2017, 10:24
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
zoomx25,
Ну это уж вы сами смотрите, какой результат и куда вы пишете.
Я использовал result_ls просто для примера в своем макете
Можете в функцию isright передавать еще и индекс нужного вам в каждом конкретном случае поля результата, или поле результата искать в той же строке, что и обрабатываемый инпут
Например
<table width="896" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="341"><p>Лазерный сканер</p><p> </p></td>
<td><div class ="input-style-calc"/><input type="number" min="0" max="999" value="0" name="days" id="days" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this,'result_ls');" onchange=" isright(this,'result_ls');"/></div></td>
<td><span style="font-size: 14px;" id="result_ls">0</span> руб.</td>
</tr>
<tr>
<td width="341"><p>Приемник GPS (Статика L2)</p><p> </p></td>
<td><input type="number" min="0" max="999999" value="0" name="days2" id="days2" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this,'result_p_gps');" onchange=" isright(this,'result_p_gps');"/></div></td>
<td><span style="font-size: 14px;" id="result_p_gps">0</span> руб.</td>
</tr>
</table>
<script>
function isright(obj,res_id)
{
if (obj.value>999) obj.value=999;
if (obj.value<1) obj.value='';
document.getElementById(res_id).innerText = (obj.value == '') ? '0' : obj.value;
}
</script>
Последний раз редактировалось Dilettante_Pro, 06.04.2017 в 10:50.
|
|
06.04.2017, 12:35
|
Интересующийся
|
|
Регистрация: 03.04.2017
Сообщений: 10
|
|
Сообщение от Dilettante_Pro
|
zoomx25,
Ну это уж вы сами смотрите, какой результат и куда вы пишете.
Я использовал result_ls просто для примера в своем макете
Можете в функцию isright передавать еще и индекс нужного вам в каждом конкретном случае поля результата, или поле результата искать в той же строке, что и обрабатываемый инпут
Например
<table width="896" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="341"><p>Лазерный сканер</p><p> </p></td>
<td><div class ="input-style-calc"/><input type="number" min="0" max="999" value="0" name="days" id="days" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this,'result_ls');" onchange=" isright(this,'result_ls');"/></div></td>
<td><span style="font-size: 14px;" id="result_ls">0</span> руб.</td>
</tr>
<tr>
<td width="341"><p>Приемник GPS (Статика L2)</p><p> </p></td>
<td><input type="number" min="0" max="999999" value="0" name="days2" id="days2" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this,'result_p_gps');" onchange=" isright(this,'result_p_gps');"/></div></td>
<td><span style="font-size: 14px;" id="result_p_gps">0</span> руб.</td>
</tr>
</table>
<script>
function isright(obj,res_id)
{
if (obj.value>999) obj.value=999;
if (obj.value<1) obj.value='';
document.getElementById(res_id).innerText = (obj.value == '') ? '0' : obj.value;
}
</script>
|
С этими блоками проблем нет, проблема с блоками такого вида
182
<td><p>Тахеометр
183
</p>
184
<p>
185
<select size="1" id="taheomId" onChange="cal()">
186
<option value="tah_na_otrzh">На отрожатель</option>
187
<option value="tah_bez_6_5">Безотрожательный (6";5")</option>
188
<option value="tah_bez_2_1">Безотрожательный (2";1")</option>
189
<option value="tah_robot">Роботизированный</option>
190
</select>
191
</p>
192
</td>
193
<td><input type="number" min="0" max="999999" value="0" name="days5" id="days5" onkeyup="this.value=this.value.replace(/[^0-9]+/g,''); isright(this,'summ_taheom_r');" onchange=" isright(this,'summ_taheom_r');"/></td>
194
<td>результат</td>
195
<td><span id="summ_taheom_r">0</span> руб.</td>
в них все равно выходит NaN если поле будет пустым.
Может я что то не так понял?
|
|
06.04.2017, 14:27
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
zoomx25,
Разберитесь со своим алгоритмом, что, откуда и куда вы пишете.
В функции isright писать в результат ничего не надо (вы пишете результаты в функции cal) - я продемонстрировал вам принцип корректного считывания данных из исходных инпутов.
Используйте этот принцип в функции cal
|
|
|
|