1

入力タグが隠されている次のフォーム(下)があります。フォームの送信と返信時に、その非表示の入力名の名前を「__REMOVE__」の値に変更したいと思います。次に、フォームの応答を再度送信したら、「__ADD__」などに戻します。ただし、コードは機能していません。name="__ADD__"はフォーム上で変更されることはありません。私はjQueryを初めて使用するので、無知を許してください。__BRONZE__の値は決して変更しないことに注意してください。名前を変更するのはバックエンドPHPの要件です。

形:

<form action="cart.php" method="post" class="cart-ajax">
    <input type="hidden" name="__ADD__" value="__BRONZE__" />
    <br><button type="submit" class="add-more-top dark cart-button-eight">Add to Cart</button>
    <div class="cart-ajax-response"></div>
</form>

jQuery:

$(document).ready(function() {

// code here snipped out to keep this question short

    // Shopping Cart Form
    $("form.cart-ajax").submit(function(e) {
            e.preventDefault();
            var form = $(this);

            // update the submit buttons text on form submission
            if(form.find('input:hidden').attr('name', '__ADD__'))
            {
                    form.find('button:submit').html('Adding...');
            }
            else if(form.find('input:hidden').attr('name', '__REMOVE__'))
            {
                    form.find('button:submit').html('Removing...');
            }

            $.post(form.attr('action'), form.serialize(),
                    function(data) {

                            // update the submit buttons text after successful response 
                            // update the hidden form field with the opposite of the current value
                            if(form.find('input:hidden').attr('name') == '__ADD__')
                            {
                                    form.find('button:submit').html('Remove');
                                    form.find('input:hidden').attr('name', '__REMOVE__');
                            }
                            else if(form.find('input:hidden').attr('name') == '__REMOVE__')
                            {
                                    form.find('button:submit').html('Add');
                                    form.find('input:hidden').attr('name', '__ADD__');
                            }

                            // do something with the returned data - used in cart-ajax-response div
                            form.find('.cart-ajax-response').empty().html(data.aResults[0]);

                    }, 'json');
    });
}); // <-- document ready
4

1 に答える 1

4
if(form.find('input:hidden').attr('name', '__ADD__'))

あなたが思っていることをしていません。実際には、フィールドが存在するかどうかを尋ねずに、そのフィールドの名前を設定しています。

使用する

if(form.find('input[name="__ADD__"]').length)

そしてnote.lengthはあなたに整数を取得します。これがないと、オブジェクトが返されます。これは、長さが0の場合でも当てはまります。

ただし、このhttp://jsfiddle.net/3xTfX/2/を見てください-同じこと、より少ないコード

于 2012-12-28T03:18:59.653 に答える