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' title='".$info['bill']."' class='defaultText' /><br />
            Bill name<input type='text' id='bill-name' name='bill-name' title='".$info['bill_name']."' class='defaultText' /><br />
           bill descriptiion <input type='text' id='bill-description' name='bill-description' title='".$info['bill_description']."' class='defaultText'  /><br />
            category   <select id='bill-category' name='bill-category'>
                <option value='Household Bills'>Household Bills</option>
                <option value='Social Activities'>Social Activities</option>
            </select>
        <input type='button' value='Save' class='bill-upd-submit' />
        </form>   

次に、AJAX を使用してこのデータをテーブルに送信し、それに応じてレコードを更新します。これは正常に機能します

AJAX

 $(".bill-upd-submit").click(function() {
          var elem = $(this);
         $.post("update_bill.php", elem.parent(".bill-upd").serialize(), function(data) {
         // fade new data in
         elem.closest('li').html(data);
        });

    });

PHP

 $uid = $_SESSION['oauth_id'];
   $id = mysql_real_escape_string($_POST['billid']);       
   $bill = mysql_real_escape_string($_POST['total']);
   $billname = mysql_real_escape_string($_POST['bill-name']);
   $billdescription = mysql_real_escape_string($_POST['bill-description']);
   $billcolour  = mysql_real_escape_string($_POST['bill-category']);
   $rand = mysql_real_escape_string($_POST['rand2']);



        #update Record
       $query = mysql_query("UPDATE `outgoings` SET id = '$id', user_id = '$uid', bill = '$bill', bill_name = '$billname', bill_description = '$billdescription', bill_colour = '$billcolour', rand = '$rand' WHERE user_id = '$uid' AND rand = '$rand' ") or die(mysql_error());






         Print "<span class='cost'>&pound;".$bill . "</span> ";
         Print "<h4 class='bill-name'>".$billname . "</h4> ";
         Print "<p class='bill-details'><span class='bill-category'>".$billdescription . "</span> "; 
         Print "<span class='bill-description'>". $billcolour . "</span></p>"; 
     echo "<a href='#' class='edit-bill'>edit</a> 

         <form class='bill-upd show'>
            <input type='hidden' value='".$rand."' name='rand2' id='rand2'>
            <input type='hidden' value='".$billname."' name='billid' id='billid''>
            Total <input type='text' title='".$bill."' id='total' name='total' value='".$bill."'/><br />
            Bill name<input type='text' id='bill-name' name='bill-name' value='".$billname."'/><br />
           bill descriptiion <input type='text' id='bill-description' name='bill-description' value='".$billdescription."'/><br />
            bill colour<input type='text' id='bill-colour' name='bill-colour'value='".$billcolour."'/>
          <input type='button' value='Save' class='bill-upd-submit' />
        </form>   

         <form class='delete-bill'>
             <input type='hidden' value='".$rand."' name='rand2' id='rand2'>

        <input type='button' value='delete' class='delete' />
        </form>   

         "; 

Ajax を更新すると、本来あるべきレイアウトのデータがすべて返されますが、今回だけです。フォームに入力しても、テーブルは更新されません。私が間違っている可能性があることの考え?ありがとう

4

1 に答える 1

0

コンテンツを動的にロードしているため、最初のバインディングは機能しません。jQuery onこのような結束に使用します。

$(function(){
    $(document).on("click",".bill-upd-submit").click(function(e) {
        e.preventDefault();
        var elem = $(this);
        $.post("update_bill.php", elem.parent(".bill-upd").serialize(), function(data){
           elem.closest('li').html(data);
        });    
     });
 });

jQueryonは、現在および将来の要素 (ajax などを介して読み込まれる) に対して機能します。

http://api.jquery.com/on/

jQuery on は 1.7+ から利用できます。そのため、それより前のバージョンを使用している場合は、live

于 2012-04-27T19:24:24.820 に答える