【问题标题】:jQuery html() to replace div contents works only for the first timejQuery html() 替换 div 内容仅适用于第一次
【发布时间】:2011-09-29 14:42:08
【问题描述】:

我正在使用 AJAX 请求来处理我的应用程序中处理照片管理的某些部分...用户可以单击“”按钮来更改照片的顺序。一切正常,但仅在我第一次单击按钮时...后续单击不会触发任何内容。

主模板:

<script type="text/javascript">
$(function() {
    $(".manage_photo").click(function(event) {
        event.preventDefault();

        var id = $(this).attr("id");
        var action = $(this).attr("name");
        var data = { id: id, action: action };

        $.ajax({
            type: "POST",
            url: "{% url managePhotos %}",
            data: data,
            success: function(results) {
                $("#list").html(results);
            },
        });
    })
})
</script>

....

{% if photos %}
    <p><strong>{{ photos.count }} photo(s) added</strong></p>
    <div class="highslide-gallery">
        <div id="list">
            {% include "ajax/photos.html" %}
        </div>
    </div>
    <div class="cleaner"></div>
{% else %}
    <h5>Photos not yet added</h5>
{% endif %}

ajax/photos.html 的代码:

{% for photo in photos %}
<div class="vehicle_photo">
    <button class="manage_photo" name="incr" id="{{ photo.id }}"
        {% if forloop.first %} disabled="disabled"{%endif %} style="float: left">
        &nbsp;<&nbsp;
    </button>
    <button class="manage_photo" name="decr" id="{{ photo.id }}" 
        style="float: right">
        &nbsp;>&nbsp;
    </button>
    <br />
    <a href="{{ photo.original_image.url }}" class="highslide" 
        onclick="return hs.expand(this)">
        <img class="ui-corner-all" src="{{ photo.thumbnail_image.url }}" />
    </a>
    <br />
    {{ photo.position_number }}
</div>
{% endfor %}

我的视图在更改所选照片的​​顺序后返回一个 render_to_response 版本的 photos.html,结果包含该照片集中所有照片的查询集,以及一条状态消息,即。成功,失败:

return render_to_response('ajax/photos.html', results)

我的问题可能是什么?我尝试了以下建议:this SO question,但没有一个适合我。自从我从昨天起就一直在这方面,任何见解都将不胜感激。

【问题讨论】:

  • 如果您删除所有内联代码并仅发布发送到浏览器的最终 html,那么提供帮助会容易得多。
  • 您确定请求不仅会在第一次点击后发送吗?请在此处查看 firebug + 发布回复。
  • @Andron:是的,它只在第一次点击后发送......我签入了萤火虫。但下面鲁道夫的回答奏效了

标签: html ajax django


【解决方案1】:

当你执行 $(function...) 时,DOM 中的东西会被绑定,但是当你用其他东西替换东西时,新的东西不会被绑定。您可以使用 .live 命令使其适用于旧的和新的东西,或者您可以再次绑定新的东西(在 ajax 之后再次运行 $(".manage_photo").click(...)。
顺便说一句,您可以用简单的 $("#list").load("{% url managePhotos %}")

替换 ajax 块

【讨论】:

  • 它就像一个魅力鲁道夫......非常感谢你的帮助。我还在学习这个 ajax/jQuery 的东西,所以学习新东西总是好的。也感谢您的提示:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多