-4

これは、実行時に機能しないコードです。何が欠けているのか、どこが間違っていたのか教えてください。

$(':input').bind('keypress keydown keyup change', function() {
    var acho = parseFloat($(':input[name="acho"]').val(),10),
        alto = parseFloat($(':input[name="alto"]').val(),10),
        matl = parseFloat($(':input[name="material"]').val(),10);
        cat = parseFloat($(':input[name="category"]').val(),10);

    var v = '';

    if (!isNaN(acho) && !isNaN(alto) && !isNaN(matl)){
        v = cat*(matl / 100) / ((alto / 100) * (acho / 100));
    }

    $(':input[name="ml"]').val(v.toString());

​});​
4

2 に答える 2

2

変数の定義に問題があります:

matl = parseFloat($(':input[name="material"]').val(),10);

この行の後にコンマが必要です。b/c は後続の変数割り当てです。vそして、私はちょうど良い尺度で投げます。

var acho = parseFloat($(':input[name="acho"]').val()),
    alto = parseFloat($(':input[name="alto"]').val()),
    matl = parseFloat($(':input[name="material"]').val()),
    cat = parseFloat($(':input[name="category"]').val()),
    v = '';

(無効な基数パラメータも から削除parseFloat)

修正されたコード:

$(':input').bind('keypress keydown keyup change', function() {
    var acho = parseFloat($(':input[name="acho"]').val()),
        alto = parseFloat($(':input[name="alto"]').val()),
        matl = parseFloat($(':input[name="material"]').val()),
        cat = parseFloat($(':input[name="category"]').val()),
        v = '';

    if ( !isNaN(acho) && !isNaN(alto) && !isNaN(matl) ){
        v = cat*(matl / 100) / ((alto / 100) * (acho / 100));
    }

    $(':input[name="ml"]').val( v.toString() );
});
于 2012-11-07T21:13:46.827 に答える
0

あなたのコードはほとんど動作します:

  1. document.readyハンドラーにあることを確認します
  2. 10基数パラメータを削除してくださいparseFloat- サポートされていません
  3. 関数に登録しないkeyXXXでください - それらのいくつかは、押されたキーが入力の値に追加される前に呼び出されます
  4. 代わりにHTML5 のinputイベント (および) を使用するchange
  5. [ああ、それはドロップダウンです - 気にしないでください]をテストcatすることを忘れないでくださいisNaN
  6. everyvarが適切に宣言されていることを確認してください

最小限の変更を加えた私の作業バージョンはhttp://jsfiddle.net/alnitak/6hNQ2/にあり、クリーンアップされたバージョンは次のとおりです。

$(':input').bind('input change', function() {

    // don't repeat yourself - also strips whitespace
    function val(f) {
        var $el = $(':input[name="' + f + '"]');
        return parseFloat($.trim($el.val()));
    }

    var acho = val('acho'),
        alto = val('alto'),
        matl = val('material'),
        cat = val('category');

    if (isNaN(acho) || isNaN(alto) || isNaN(matl)) {
        return;
    }

    var v = cat * (matl / 100) / ((alto / 100) * (acho / 100));
    $(':input[name="ml"]').val(v);
});​

http://jsfiddle.net/alnitak/4Xw3D/

于 2012-11-07T21:25:46.693 に答える