2017-06-22 60 views
1

我想写一个jquery函数,控制基于区域设置的texfield(货币)的用户输入。警报确实告诉我,德语区域是“德”。但是if-else逻辑不起作用。如果没有if-else,特定键码的preventDefault()工作得很好。有人可以告诉我,我在这里做错了什么?JQuery的 - IF-ELSE逻辑不工作

 jQuery(function($) { 
      $('.currency').on('keydown', function(e) { 
       var locale = $('#currFormat').val(); 
       //alert(locale); 

       if (locale.toLowerCase() === "de") {      
        console.log(e.keyCode); 

       if (e.keyCode !== 46 && e.keyCode > 31 && e.keyCode !== 96 && e.keyCode !== 97 && e.keyCode !== 98 && e.keyCode !== 99 && e.keyCode !== 100 && e.keyCode !== 101 && e.keyCode !== 102 && e.keyCode !== 103 && e.keyCode !== 104 && e.keyCode !== 105 && e.keyCode !== 188 e.keyCode !== 37 && e.keyCode !==39 && (e.keyCode < 48 || e.keyCode > 57)) { 
        //stop all non-numbers 
        e.preventDefault(); 

       } else { 
       // Here goes logic for not allowing comma and others (,) 
       } 
      }); 
      }); 

'金额'值来自JSP。

<input type="hidden" id="CurrFormat" name="currFormat" 
    value="${pageContext.request.locale.language}" /> 
+0

什么是第二个控制台日志输出? –

+0

所以那是我在那里的键码,控制台在JS中显示语法错误。它指出了我刚刚编辑过的那句话。虽然,在我添加if-else之前,它对我很有用。 –

回答

3

您有一个错字。因此,从技术上讲,您选择的页面上不存在的元素。

$('#currFormat').val(); 

应该是

$('#CurrFormat').val(); 

而且这是一个复制粘贴错误以及

e.keyCode !== 188 e.keyCode !== 37 --> missing logical && between expressions 

而且很容易犯了语法错误是因为代码的原因根本不可读。相反,你可以浓缩它,使其更简单。

var keyCode = e.keyCode; 
var invalidKeyCodes = [37, 39, 46, 96, 97, 98, 99, 100, 101. 102, 103, 104, 105, 188]; 

if (invalidKeyCodes.indexOf(keyCode) < 0 && keyCode > 31 && (keyCode < 48 || keyCode > 57)) { 
+0

抱歉,发布错误时发布了问题。我的代码中有正确的ID。 –

+0

'e.keyCode!== 188 e.keyCode!== 37'?这是复制粘贴问题吗? –

+0

现在工作吗? –