2013-06-24 3 views
1

У меня есть следующий Javascript код приспособлен, чтобы помочь ограничить ввод текста в одной десятичной точки, а загружены на мой тестовый сервер на cogwheelmedia.net/Survey/numerickey.phpОграничение текстового поля для одной записи десятичной точки (код работает в Safari, но не Firefox)

Несмотря на то, что он работает в Safari, он, похоже, не работает в Firefox. Какие изменения я должен сделать, чтобы заставить его работать во всех браузерах?

<body> 
<p> 
    <script type="text/javascript"> 
function OnTextNumericKeyPress(evt) { 
     var theEvent = evt || window.event; 
     var rv = true; 
var key = (typeof theEvent.which === 'undefined') ? theEvent.keyCode : theEvent.which; 
     if (key && (key !== 8)) { 
      var keychar = String.fromCharCode(key); 
      var keycheck = /[.0-9]/; 
      if (!keycheck.test(keychar) || (keychar == '.' && evt.srcElement.value.indexOf('.') > -1)) {  
     rv = theEvent.returnValue = false; //for IE 
      if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox 
} else { 
var number = evt.srcElement.value.split('.'); 
if (number.length == 2 && number[1].length > 1) { 
    rv = theEvent.returnValue = false; //for IE 
    if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox 
    } 
} 
     return rv; 
    } 


function ValidateDecimal(o) { 
    if (o.value.length > 0) { 
     var objReg = /^\d+(\.\d{1,2})?$/; 
     if (objReg.test(o.value))        
      o.style.backgroundColor=''; 
     else 
     o.style.backgroundColor='red'; 
     return false; 
    } 
} 
} 
</script> 
    <input name="txtPrice" ID="txtPrice" type="text" runat="server" MaxLength="8" onfocusout="return OnTextNumericKeyPress(event);" onBlur="return OnTextNumericKeyPress(event);" onKeyPress="return OnTextNumericKeyPress(event);" onkeyup="ValidateDecimal(this);"/> 
</p> 
</body> 
</html> 

ответ

0

Просто организуйте код. Для начала я предлагаю вам использовать скобки, потому что они бесплатные, а для второго: использовать отступы, он также бесплатный. Другие советы - объявить только один раз переменные, которые не нужно переопределять во время выполнения, иначе вы потеряете все пространство, которое вы получили, избегая скобок и отступов.

Как легко видно из отладчика, функция validateDecimal не была определена, потому что она была внутри OnTextNumericKeyPress: вы не можете использовать то, что не видите.

здесь код, надеюсь, теперь он работает, как ожидалось:

<script type="text/javascript"> 
var objReg = /^\d+(\.\d{1,2})?$/; 
var keycheck = /[.0-9]/; 
var rv = true; 

function OnTextNumericKeyPress(evt) { 
    var theEvent = evt || window.event; 
    var key = (typeof theEvent.which === 'undefined') ? theEvent.keyCode : theEvent.which; 
    if (key && (key !== 8)) { 
     var keychar = String.fromCharCode(key); 
     if (!keycheck.test(keychar) || 
      (keychar == '.' && evt.srcElement.value.indexOf('.') > -1)) {  
       rv = theEvent.returnValue = false; //for IE 
       if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox 
     }else{ 
      var number = evt.srcElement.value.split('.'); 
      if (number.length == 2 && number[1].length > 1) { 
       rv = theEvent.returnValue = false; //for IE 
       if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox 
      } 
     } 
    return rv; 
    } 
} 
function ValidateDecimal(o) { 
    if (o.value.length > 0) { 
     if (objReg.test(o.value)){        
      o.style.backgroundColor=''; 
     }else{ 
      o.style.backgroundColor='red'; 
     } 
     return false; 
    } 
} 
</script> 
<p> 
    <input name="txtPrice" ID="txtPrice" type="text" runat="server" MaxLength="8" 
    onfocusout="return OnTextNumericKeyPress(event);" 
    onBlur="return OnTextNumericKeyPress(event);" 
    onKeyPress="return OnTextNumericKeyPress(event);" 
    onkeyup="ValidateDecimal(this);"/> 
</p> 
+0

Спасибо. Это сработало :) – aztek

+0

@aztek np gl, обратите внимание с копией/вставкой и несколькими точками –

 Смежные вопросы

  • Нет связанных вопросов^_^