Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка вводимых символов input (https://javascript.ru/forum/misc/68262-proverka-vvodimykh-simvolov-input.html)

zoomx25 05.04.2017 17:41

Проверка вводимых символов 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>

Dilettante_Pro 05.04.2017 18:03

<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>

zoomx25 05.04.2017 18:21

то при пустом поле или символьном значение выводиться NaN.

При таком варианте будет выводиться значение NaN.

Dilettante_Pro 05.04.2017 18:25

zoomx25,
Цитата:

Сообщение от zoomx25
то при пустом поле или символьном значение выводиться NaN.

Куда выводится?

zoomx25 05.04.2017 18:31

При пустом значение Комплект 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>&nbsp;</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>&nbsp;</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>&nbsp;
          </p>
          <p>
            <input type="button" name="button" id="button" onClick="cal()" value="вычислить" />
          </p>
        <p>&nbsp;</p></td>
     <td>Итого</td>
      <td><span id="result">0</span> руб.</td>   
    </tr>
  </table>
</form>
<p>&nbsp;</p>
</body>
</html>

Dilettante_Pro 05.04.2017 18:55

zoomx25,
Посмотрите измененный пост 2

zoomx25 05.04.2017 21:20



Вот что получается (((

Dilettante_Pro 06.04.2017 10:24

zoomx25,
Ну это уж вы сами смотрите, какой результат и куда вы пишете.
Я использовал result_ls просто для примера в своем макете

Можете в функцию isright передавать еще и индекс нужного вам в каждом конкретном случае поля результата, или поле результата искать в той же строке, что и обрабатываемый инпут

Например
<table width="896" border="1" align="center" cellpadding="5" cellspacing="0">
  <tr>
     <td width="341"><p>Лазерный сканер</p><p>&nbsp;</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>&nbsp;</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>

zoomx25 06.04.2017 12:35

Цитата:

Сообщение от Dilettante_Pro (Сообщение 449391)
zoomx25,
Ну это уж вы сами смотрите, какой результат и куда вы пишете.
Я использовал result_ls просто для примера в своем макете

Можете в функцию isright передавать еще и индекс нужного вам в каждом конкретном случае поля результата, или поле результата искать в той же строке, что и обрабатываемый инпут

Например
<table width="896" border="1" align="center" cellpadding="5" cellspacing="0">
  <tr>
     <td width="341"><p>Лазерный сканер</p><p>&nbsp;</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>&nbsp;</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 если поле будет пустым.
Может я что то не так понял?

Dilettante_Pro 06.04.2017 14:27

zoomx25,
Разберитесь со своим алгоритмом, что, откуда и куда вы пишете.
В функции isright писать в результат ничего не надо (вы пишете результаты в функции cal) - я продемонстрировал вам принцип корректного считывания данных из исходных инпутов.
Используйте этот принцип в функции cal


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