2012-06-04 169 views
2

防止用戶在輸入文本元素中輸入負值的最佳方法是什麼?不允許使用負值

目前我正在檢查模糊的字段值,但我希望有人有更好的解決方案。

$(".payment").blur(function() { 
    var payment = getAmount($(this).val()); 
    if(!isNaN(payment) && amount >= 0) { 
     $(this) 
      .css("color", "black") 
      .val(currency(payment)); 
    } else { 
     if(amount < 0) showMessage("Negative amounts are not allowed", "error"); 
     $(this).css("color", "red"); 
    } 
}); 

function getAmount(strAmount) { 
    var amount = new String(strAmount).replace(/\$/g, "").replace(/,/g, ""); 
    return parseFloat(amount); 
} 
+2

getAmount函數有什麼作用? 'amount'變量來自哪裏?你的意思是:如果(!isNaN(付款)&&付款> = 0)' –

+1

如果它在模糊處理,而你真正的問題是你應該在什麼時候驗證該字段,那取決於情況。您可以驗證關鍵幀,更改,模糊或表單提交。每個人都有自己的優點和缺點。 –

+0

我真的不知道這是不是最好的方法,但是您可以使用'keyup event'並獲取該值,然後檢查它是否爲正 – Jorge

回答

9

您可以使用jQuery的.keypress()並防止對 - 鍵的默認操作。 實施例:http://jsfiddle.net/5cgXg/


$("#target").keypress(function(event) { 
    if (event.which == 45 || event.which == 189) { 
     event.preventDefault(); 
    } 
}); 
+1

哈哈,偉大的思想家們都這麼想:P –

+0

你在哪裏想出45個?當我按短劃線鍵時,我得到了109。除此之外,這個想法是一樣的。 –

+0

好的解決方案。我仍然會在提交時進行驗證,以防複製粘貼。 – ToddBFisher

2

這應該做的伎倆:

$(".payment").keydown(function(event) { 
    if (event.keyCode == 45) { event.preventDefault(); } 
}); 

這將防止keydown事件從用於字符代碼時註冊 - 檢測(45) 「」。

1

您可以使用jQuery的keypresskeydown事件來測試每個鍵上的輸入。

如果您還有其他字段需要驗證,請考慮jQuery Validation插件。

0

感謝您的所有答案。

這裏是我結束了:

$("input.payment").keypress(function(e) { 
    validateNumeric(e); 
}); 

function validateNumeric(evt) { 
    var theEvent = evt || window.event; 
    var key = theEvent.keyCode || theEvent.which; 
    key = String.fromCharCode(key); 
    var regex = /[0-9]|\./; 
    if(!regex.test(key)) { 
     theEvent.returnValue = false; 
     if(theEvent.preventDefault) theEvent.preventDefault(); 
    } 
} 
+1

-1沒有足夠的jquery。 – goat

2

在假設你可能不希望與鍵碼(e.whiche.keyCode等)工作的,這裏有一個另外的選擇:

$('#a').blur(
    function(){ 
     var v = $(this).val(), 
      t = parseInt(v,10), 
      b = isNaN(t); 
     if (b){ 
      $(this).val(''); 
     } 
     else { 
      $(this).val(Math.abs(t)); 
     } 
    });​ 

JS Fiddle demo

參考文獻: