0

我已經修改了我的comments/form.htmlcomments/posted.html以類似的方式在Facebook工作,即您發表評論,數據posted然後用給定的裝載,並附加一定divIDDjango的jQuery的評論形式發佈過很多次

我的問題是,它似乎發佈了所有的數據量的形式。

因此,場景是,我有5個表格,其中一個數據,如果我點擊評論,它提交的數據,1成功,但4返回空。

<div id="commentload"></div> 
<div class="comments"> 
    <form action="{% comment_form_target %}" method="post" class="comment-form"> 
    {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %} 
    {% for field in form %} 
     {% if field.is_hidden %} 
      {{ field }} 
     {% else %} 
     {% if field.errors %}{{ field.errors }}{% endif %} 
      <p 
      {% if field.errors %} class="error"{% endif %} 
      {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}> 
      </p> 
     {% endif %} 
    {% endfor %} 
    <textarea id="id_comment" rows="1" cols="60" name="comment" class='id_comment'></textarea> 
    <p class="submit"> 
     <input type="submit" name="post" class="submit-post blue comment_submit" value="{% trans "Comment" %}" id="button" style="float:right;margin-top:-6px;margin-bottom:4px;"/> 
    </p> 
    <div class="clearfix"></div> 
    </form> 

</div> 

然後我的jQuery看起來如下

<script type="text/javascript"> 
    $(document).ready(function(){ 
     // Here it runs a simple each statement to apply a unique ID to each comment-form 
     $('.comment-form').each(function(){ 
      var element = $(this).find('#id_object_pk').val(); 
      $('#commentload').attr('id','commentload'+element); 
      $(this).attr('name', element); 
      $(this).attr('id', element); 
      $(this).find('#button').attr('id', element); 
      $(this).find('#id_content_type').attr('id', 'id_content_type' + element); 
      $(this).find('#id_timestamp').attr('id', 'id_timestamp' + element); 
      $(this).find('#id_security_hash').attr('id', 'id_security_hash' + element); 
      $(this).find('#id_comment').attr('id', 'id_comment' + element); 
     }); 

     $(".comment_submit").live("click",function() { 
      var ID = $(this).attr('id'); 

      var content_type = $('#id_content_type'+ID).val(); 
      var timestamp = $('#id_timestamp'+ID).val(); 
      var security_hash = $('#id_security_hash'+ID).val(); 
      var comment = $('#id_comment'+ID).val(); 
      var dataString = 'content_type='+ content_type +'&timestamp='+ timestamp +'&security_hash=' + security_hash + '&comment=' + comment + '&object_pk=' + ID; 

      if (comment=='') { 
       alert('Please enter a comment'); 
      } else { 
       $('#id_comment'+ID).val('').addClass("greyout"); 
       $.ajax({ 
        type: "POST", 
        url: "{% comment_form_target %}", 
        data: dataString, 
        cache: false, 
        success: function(html){ 
         $("#commentload"+ID).append(html); 
         $('#id_comment'+ID).val('').removeClass("greyout").focus(); 
        } 
       }); 
      } 
      return false; 
     }); 
    }); 
</script> 

HTML輸出爲每一個

<div id="wall-comments"> 
    <div class="comments"> 
    <form action="/comments/post/" method="post" class="comment-form" id="114"> 
     <input type="hidden" name="content_type" value="wall.post" id="id_content_type114"> 
     <input type="hidden" name="object_pk" value="114" id="id_object_pk"> 
     <input type="hidden" name="timestamp" value="1291370494" id="id_timestamp114"> 
     <input type="hidden" name="security_hash" value="2d208d05d725528dfef940d8a5b520362faa3317" id="id_security_hash114"> 
     <textarea id="id_comment114" rows="1" cols="60" name="comment" class="id_comment" style="height: 24px; overflow-x: hidden; overflow-y: hidden; "></textarea> 
     <p class="submit"> 
      <input type="submit" name="post" class="submit-post blue comment_submit" value="Comment" id="114" style="float:right;margin-top:-6px;margin-bottom:4px;"> 
     </p> 
     <div class="clearfix"></div> 
    </form> 
    </div> 
</div> 

回答

1

您具有約束力點擊表格的ID存在明顯的差異功能太多次了。你只應該調用.live(「click」,function(){});每頁加載一次。否則,在再次調用live()之前,應該使用die()來解除函數的綁定。

我仍然認爲這是答案。將點擊.live呼叫更改爲:

$(".comment_submit").die("click").live("click",function() { 
    var ID = $(this).attr('id'); 

    var content_type = $('#id_content_type'+ID).val(); 
    var timestamp = $('#id_timestamp'+ID).val(); 
    var security_hash = $('#id_security_hash'+ID).val(); 
    var comment = $('#id_comment'+ID).val(); 
    var dataString = 'content_type='+ content_type +'&timestamp='+ timestamp +'&security_hash=' + security_hash + '&comment=' + comment + '&object_pk=' + ID; 

    if (comment=='') { 
     alert('Please enter a comment'); 
    } else { 
     $('#id_comment'+ID).val('').addClass("greyout"); 
     $.ajax({ 
      type: "POST", 
      url: "{% comment_form_target %}", 
      data: dataString, 
      cache: false, 
      success: function(html){ 
       $("#commentload"+ID).append(html); 
       $('#id_comment'+ID).val('').removeClass("greyout").focus(); 
      } 
     }); 
    } 
    return false; 
}); 
+0

感謝您的建議。我試過了,但它似乎仍然通過了所有的驗證形式。我還有另一種解決方法嗎? – ApPeL 2010-12-01 08:49:11