0

私のページには、これと同じ複数のフォームがあります...

<form class='bill-upd'>
   <input type='hidden' value='".$info['rand']."' name='rand2' id='rand2'>
   <input type='hidden' value='".$info['id']."' name='billid' id='billid'>
   Total <input type='text' id='total' name='total' /><br />
   Bill name<input type='text' id='bill-name' name='bill-name' /><br />
   bill descriptiion <input type='text' id='bill-description' name='bill-description' /><br />
   bill colour<input type='text' id='bill-colour' name='bill-colour' />
   <input type='button' value='submit' onClick='updateBill();' />
</form>  

私はそれから私のAJAXを持っています

function updateBill()
{
    $.post('update_bill.php', $('.bill-upd').serialize(), 
        function(data) {
        $(this).append(data);
    });
};

ページに 1 つのフォームがある場合、これは正常に機能しますが、複数のインスタンスがある場合、同じレコードが上書きされます。どこが間違っているのか教えてもらえますか?

ありがとう


@Armatus と @Bricriu の助けを借りて、私はそれをソートしました。マークされた答えはうまくいきました。

4

2 に答える 2

1

更新する請求書を指定する方法が必要です。そうしないと、すべての請求書が取得されます。どのボタンがクリックされたかを判断できるため、これは機能するはずです。

編集:私は個人的には、要素自体の onClick ではなく jQuery を使用してバインドします。

$(".bill-upd input:submit").click(function(){
    var elem = $(this);
    $.post('update_bill.php', elem.parent('.bill-upd').serialize(), 
        function(data) {
        elem.append(data);
    });
});
于 2012-04-21T21:01:00.913 に答える
0

他のフォームに同じクラスがある場合.bill-upd、JavaScript.serlialize()はそれらからも値を取得します。他のフォームに代替クラスがあることを確認してください。

id="billform"フォームに などの一意の ID を付けてから に置き換える$('.bill-upd').serialize()と、より良いでしょう$('#billform').serialize()

お役に立てれば。

編集:

これを使って:

$(this).parent('.bill-upd').serialize() 

クリックされたものの親をシリアル化します。

于 2012-04-21T20:48:46.440 に答える