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/ oninputnotを使用し、(2) with 間隔を使用して、ユーザーが実際に入力して変更した内容を確認することです。最初から入力できないようにするのではなく、テキストボックスで更新された後にそれを入力します。繰り返しになりますが、これは貼り付けや削除、および先頭以外の場所への文字の挿入などに役立ち、一般的に作業が楽になります。アイデアは、ユーザーに変更を許可し、それらが問題ないことを確認することです。onkeypressonkeypresssetTimeout0

onkeydownwithのoninput使用はレガシー ブラウザに使用されることに注意してください。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 に答える