1

これを検索するのになぜそんなに苦労しているのかわかりません。とても簡単に思えますが、情報が見つかりません。

基本的に、フィールド内の数値に応じて ASP.net フォームのコントロールを更新したいと考えています。

したがって、0x0= の場合は 0 が表示され、数字を 5x5= に変更すると (入力が終了するとすぐに) 自動的に 25 が表示されます。

編集:私は本当に良いコードサンプルを持っていません.これは私が欲しいものの例です.

<asp:textbox></asp:textbox>X<asp:textbox></asp:textbox> = <asp:label text="value of the last two being changed dynamically" />
4

4 に答える 4

2

で使用try..catchするeval()

JSFiddleで必要な処理を行う安全でない例を作成しましたが、キャレットがまだ入力ボックスにあるときに結果を待つ代わりに、blurイベントにアタッチして、コントロールの外でフォーカスを切り替えたときに値が評価されるようにしました。

それがすることはこれです:

$("input").blur(function(evt) {
    try {
        var val = eval(this.value);
        this.value = val;
    }
    catch (e) {}
});

入力ボックスの内容を評価しようとし、評価できた場合は、内容を結果に置き換えます。evalこれは、噛むことができる限り、何でも投げることができることを意味します。

私は安全ではないと言いました。なぜなら、コードはブラックホールが宇宙を飲み込む原因となる可能性のあるものについてコンテンツをチェックしていないからです...;)

  • 1 + 2 * 3変更されます7
  • universe宇宙のままにします
  • 010+19に変更されます(したがって、8進数もグロクします)
  • 0xf *2 +333を返します(ma'hexも見てください)

それをより安全にするためにあなたの方法を実装してください

もちろん、これはほんの始まりにすぎません。xを乗数にしたい場合は、入力文字列でいくつかの置換を行う必要がありますが、私の例では行いません。しかし、そうするのはかなり簡単です。

特定の計算のみを実行したい場合も同じことが当てはまります。そのため、オブジェクトや日付などの作成は許可されません...

あなたの場合に望ましくない可能性が高い例は、入力する場合です

alert(new Date())

もちろん、このコードを実行してアラートボックスを表示します。これを許可するかどうかはあなた次第です。元のデータをサーバーに投稿する場合は、もちろん入力を厳しくサニタイズする必要があります。

于 2012-08-23T15:10:58.630 に答える
2

以下は、=記号が入力されたときに入力を計算し、値を計算結果に置き換えます。

したがって:

  • 5*5=に置き換えられます25
  • 5x5=に置き換えられます25
  • 5+5=に置き換えられます10

$("input").keyup(function(){
       var $this = $(this);
        if ($this.val().indexOf("=")>=0){
           $this.val(eval($this.val().replace("=", "").replace("x","*")));
        }            
    });

http://jsfiddle.net/QP8ay/1/

このメソッドはeval()、文字列を計算に変換するために使用します。ただし、これはあまり安全ではありません。

JavaScript の eval 関数を使用するのが悪い考えなのはなぜですか?

于 2012-08-23T15:08:20.193 に答える
1

にバインドしてchange eventソース入力の値を取得し、それを使用して他のコントロールにデータを入力 できるようにする必要があります。

 $('#inputSource').on('change', function(e) {        
       var value = $(this).val();
       if (value.match('=')) {
           value = value.replace('=','');
           numbers = value.split('x');
         if (numbers.length > 1) {
           $('#controlToBeUpdated').val(parseInt(numbers[0]) * parseInt(numbers[1]));
         }
       }
    };

もちろん、値が数値などであることを確認するために、いくつかの検証を追加する必要があります。

于 2012-08-23T15:08:07.770 に答える
0

私は以下を使用します:

$(function() {
    "use strict";
    var valid = /^[\d]+[x\/\*+\-][\d]+=$/i;

    $("#calc").on("keyup", function( e ) {
        var $this = $(this);
        if ( e.keyCode === 48 ) {
            if ( valid.test(this.value) ) {
                $this.val(eval($this.val().replace("=", "").replace("x","*")));
            }
        }
    });
});

eval は悪で安全ではないため、この計算が実際に有効かどうかを最初に確認することをお勧めします。また、実際に=キーが押されているかどうかも確認します。

次のフィドルを参照してください: http://jsfiddle.net/sQVe/DSDQ2/

于 2012-08-23T15:36:39.080 に答える