1

私のフォームには、合計請求額から引き落とされる金額を受け入れる割引フィールドがあります (PHP で生成された HTML):

echo "<input id=\"discount\" class=\"text\" type=\"text\" name=\"discount\" onkeypress=\"return currency(this, event)\" onchange=\"currency_format(this)\" onfocus=\"on_focus(this)\" onblur=\"on_blur(this); calculate_bill()\"/><br/><br/>\n";

JavaScript 関数calculate_billは請求書を計算し、割引額が合計請求額よりも少ない限り、割引額を控除します。

    if(discount != ''){

        if(discount - 0.01 > total_bill){
            window.alert('Discount Cannot Be Greater Than Total Bill');
            document.form.discount.focus();
        }

        else{
            total_bill -= discount;
        }

    }

問題は、割引が請求書の合計額を超えている場合でも、フォーカスが割引フィールドに戻されないことです。calculate_bill関数を呼び出してみましonchangeたが、そのようにすると、IEもFirefoxも割引フィールドにフォーカスを戻しません。呼び出すcalculate_billonblur、IE では動作しますが、Firefox では動作しません。警告ボックスの代わりに確認ボックスも使用しようとしましたが、どちらも機能しませんでした (さらに、2 つのボタンは必要なく、「OK」ボタンのみが必要です)。

ユーザーが別のフィールドをクリックするかタブキーを押して割引フィールドを離れた後、割引額が合計請求額よりも大きい場合、フォーカスを割引フィールドに戻すにはどうすればよいですか?

4

2 に答える 2

3

ここで説明されている手法を試してみてください:Javascript / Firefox / onBlur

自分で試したことはありませんが、基本的には次のように置き換えることをお勧めdocument.form.discount.focus()します

setTimeout(function() {document.form.discount.focus();}, 1);

根本的な問題は、タブを押すと(たとえば)、ブラウザーがいくつかの手順を実行することだと思います。現在のコントロールに関連付けられているコード(onchange、onblur)を呼び出してから、フォーカスを新しいコントロールに設定します。したがって、最初のステップでフォーカスを変更した場合でも、次のステップでフォーカスはすぐにリセットされます。したがって、タイマーベースの回避策。

于 2011-01-09T21:05:37.147 に答える
-1

数値比較で割引を使用する場合は、割引を数値に変換することをお勧めします。スクリプトを次のように変更します。

if(discount != ''){
        discount = parseFloat(discount);
        if(discount - 0.01 > total_bill){
            window.alert('Discount Cannot Be Greater Than Total Bill');
            document.form.discount.focus();
        }

        else{
            total_bill -= discount;
        }

    }
于 2011-01-09T17:51:02.127 に答える