0

重複の可能性:複製
されたリスト行で同じ関数を呼び出す

簡単な計算でうまくいくようにしています。

私は次のことを実行しています:

http://jsfiddle.net/vSyK6/41/

基本的に、現在の動作は次のとおりです。ドロップダウンリストでオプションを選択すると、選択したオプションに基づいてコンテンツが表示されます。次に、同じオプションをもう一度選択すると、追加され、基本的に同じ行のクローンが作成されます。これで、2番目のオプションが「Option2」を選択すると、空のテキストボックスが表示されます。数値を入力すると、基本的な計算を行う関数を呼び出すか、呼び出す必要があります。関数はすでにスクリプトに含まれています。

ただし、空のテキストボックスが2つある場合は、同じ計算関数を呼び出す必要がありますが、別々に計算して別のdivに配置します。金額を表示するdiv#は「金額」と呼ばれます。

基本的に、次のように機能するはずです。

First Empty textbox -> 100 -> 100 * 22.38 = display result in div#1
Second Empty textbox -> 230 -> 230 * 22.38 = display in div#2

それを達成する方法について何かアイデアはありますか?

4

2 に答える 2

0

要素を複製すると、IDも複製されます。複製された要素の新しいIDを作成することをお勧めします。これは、目的を達成するのにも役立ちます。name属性についても同じことが言えます。

あなたのコードhttp://jsfiddle.net/dNQVQ/3/にいくつかの変更を加えることで、私はあなたが求めていたものを手に入れることができました。これは理想的な方法ではないかもしれませんが、それは始まりです。前に述べたように、重要なのは複製された要素に一意のIDを設定することです。この例で私が行ったことは、「amount」div内の一致するインデックスで複製されるリスト要素IDの一部としてインデックスを使用することでした。このようにして、入力が更新されると、インデックスが取得され、適切なdivを更新するために使用されます。さらに、settimeout呼び出しで、計算と更新を行う関数を無名関数に移動しました。これにより、関数呼び出しで更新された入力への参照を簡単に使用できます。

于 2012-10-14T02:44:32.013 に答える
0

ここでかなり遅くパーティーに参加します:)ここに1つのヴァーノンがあります:http://jsfiddle.net/KVPwm/

また、その割り当てがbruvの場合は、割り当てhomeworkタグを付けてください。

SOコミュニティの周りの人々は素晴らしい人々ですので、正直に言ってください、みんなが人を助けます!

  • .on--recommendationの代わりに使用してくださいlive。つまり、これを熱心に読んでいる場合は、JQソースをアップグレードしてください-jQueryライブメソッドの何が問題になっていますか?
  • あなたには2つのdocument.ready機能があります。私はあなたのためにいくつかのことを連鎖させました。
  • また、isNanチェックの使用も検討してください。
  • 残りの部分では、コードを読んで少し遊んで、より簡潔にすることができます。
  • 2を追加 し、それに応じて番号をdivs使用してデータを入力しました。id

これは原因に合うはずです:)

コード

$("document").ready(function() {
    /////////////////////////////////CALUCATIONS/////////////////////////////////
    //setup before functions
    var typingTimer; //timer identifier
    var doneTypingInterval = 0; //time in ms, 5 second for example
    $('input[name=Input2], input[name=Input1]').live('keyup', function() {
        var str = $(this).prop("id");
        var pattern = /[0-9]+/g;
        var matches = str.match(pattern);

        amount = parseFloat($(this).val()) * 22.38;
        typingTimer = setTimeout(doneTyping(matches), doneTypingInterval);
    });

    $('#Input2').keydown(function() {
        clearTimeout(typingTimer);
    });

    function doneTyping(matches) {
        $('#amount'+matches).text(amount.toFixed(2) + " lbs");
    }
    $("#List-Option1,#List-Option2").hide();

    $('#category').change(function() {
        var str = $('#category').val();
        if (str == 'Option1') {
            var option1 = $("#List-Option1:first").clone().show();
            $('#box li:last').after(option1);
        }

        if (str == 'Option2') {
            var option2 = $("#List-Option2:first").clone().show();
            $('#box li:last').after(option2);

        }

    });
});​
于 2012-10-14T02:52:24.737 に答える