1

我需要的是在用户输入文本框时强制用户 -

  1. 他们最多可以放16个

  2. 如果他们按。他们可以在点后添加额外的 2 位数字

所以到目前为止我所做的是

<asp:TextBox ID="textbox" runat="server" Width="200" onkeypress="validateCurrencyX(this,7, 2);" >0.00</asp:TextBox>

javascript代码是

function validateCurrencyX(sender,prefix, suffix){
var something = document.getElementById('textbox').value;
           var valueArr = something.split('.');

            if (valueArr[1]!= null && valueArr[1].length > suffix-1)
                event.returnValue = false;

            if (valueArr[0].length > prefix-1)
                event.returnValue = false;
    }

无论如何,我的代码存在问题-当我选择整个文本或文本的某些部分并按下某些东西时,它不会改变任何东西

他们有什么普通的方法吗?我对 javascript 和 asp.net 都很陌生,谢谢您的关注

4

3 回答 3

1

由于您对 javascript 和 .net 都是新手,因此最好不要尝试重新发明轮子。

如果您愿意使用 jQuery,请查看NumberFormatter

$(".amt").blur(function(){
    $(this).format({format:"#,###,###,###,###,###.00", locale:"us"});
});
于 2012-09-21T03:56:19.033 回答
0

这可以满足您的要求:

<asp:TextBox ID="textbox" runat="server" Width="200" oninput="validateCurrencyX(this,7, 2);" onkeydown="validateCurrencyX(this,7, 2);" >0.00</asp:TextBox>

JavaScript:

var validateCurrencyX = (function() {
    // Closure for local oldVal variable
    var oldVal = 0;
    return function validateCurrencyX(sender, prefix, suffix) {
        setTimeout(function() {
            // Convert to number
            var val = sender.value * 1,
            // Get decimals
                dec = sender.value.split('.')[1];
            if(
                val != val // NaN
                || val > 16
                || val < 0
                || dec && dec.length > suffix // check number of decimals
            ) {
                // If the new input doesn't fit the criteria, revert to the old input.
                sender.value = oldVal;
            } else {
                if(Math.floor(val) != 0 && sender.value.charAt(0) == '0') {
                    // If it's a number >= 1, remove leading '0's.
                    sender.value = sender.value.replace(/^0+/, '');
                }
                // Value is good. Save it in case we need to revert later.
                oldVal = sender.value;
            }
        }, 0);
    };
})();

这是一个工作示例:http: //jsfiddle.net/6HUUT/4/

获得用户友好的实时文本验证器的关键是 (1) 使用onkeydown/ oninputnotonkeypress因为onkeypress不会触发粘贴和删除等内容,以及 (2) 使用setTimeoutwith 间隔0来检查用户实际输入和更改的内容它在文本框中更新后,而不是试图阻止他们从一开始就输入它。同样,这有助于粘贴和删除等操作,以及在开头以外的位置插入字符,通常会让您的生活更轻松。这个想法只是让用户进行更改,然后检查它们以确保它们正常。

请注意,onkeydownwithoninput的使用用于旧版浏览器。input对于现代浏览器来说已经足够了,但是旧的浏览器(大约 IE8)不支持它。

于 2012-09-21T04:07:29.060 回答
-1

既然您已经说过,这是没有使用javascript的-他们有什么普通的方法吗?所以看看这个:

1)他们可以放的最大数量是 16:为此,您拥有maxlength文本框的属性。设置为16

2) 这段代码将限制您的用户在文本框中仅输入小数点后 2 位。

//In key press event of your TextBox:
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
    e.Handled = true;
}
if (!char.IsControl(e.KeyChar))
{
    TextBox tt = (TextBox)sender;
    if (tt.Text.IndexOf('.') > -1 && tt.Text.Substring(tt.Text.IndexOf('.')).Length >= 3)
     {
       e.Handled = true;
     }
 }
于 2012-09-21T03:56:10.447 回答