【问题标题】:selecting django objects with jquery使用 jquery 选择 django 对象
【发布时间】:2013-10-12 10:41:49
【问题描述】:

我有一个模型的对象显示在一个带有这样的 for 循环的模板中:

{% for post in posts %}

 {{post.text}}

{% endfor %}

现在我想为每个包含 post.id 值的 post 对象附加一个按钮,并且在单击该按钮时应该发出一个更新该特定对象上的投票属性的 ajax 请求。

所以,我尝试添加这样的按钮:

{% for post in posts %}

     {{post.text}}

<input type="submit" value="V" id="upButton" post_id="{{post.id}}"></input>

    {% endfor %}

在使用 ajax 之前,我只想查看按钮是否正常工作,因此我尝试检查(使用 jQuery)是否会提醒每个帖子的 post.id 值:

<script>
    $(document).ready(function(){
       $('#upButton').click(function(){
        var post_id = $('#upButton').attr('post_id');
        alert(post_id);
      });
    });
  </script>

只有第一个对象上的按钮有效。其他按钮不起作用。这里发生了什么?

【问题讨论】:

    标签: javascript jquery django django-templates


    【解决方案1】:

    id 属性每个 html 页面只能设置一次。

    因此,javascript 代码将始终只引用第一个元素。

    改成:

    <input type="submit" value="V" data-role="upButton" post_id="{{post.id}}"></input>
    

    在 javascript 中:

    <script>
        $(document).ready(function(){
           $('[data-role=upButton]').click(function(){
            var post_id = $(this).attr('post_id');
            alert(post_id);
          });
        });
      </script>
    

    它应该可以工作

    【讨论】:

    • 避免 post_id=...(无效的 HTML)并使用 data-post-id=... 这是有效的 HTML
    • 是的,解决方案有点奇怪。当“角色”显然只是一个类的另一个名称时发明data-role 是没有意义的,并且添加一个不存在的 HTML 属性(post_id)是完全错误的。我会将 HTML 更改为&lt;input type="submit" value="V" class="upButton" data-id="{{post.id}}"&gt;&lt;/input&gt;。然后两行 JavaScript 也需要更改 - 现在应该是 $('.upButton').click(function(){var post_id = $(this).data('id');
    • @LudwikTrammer 感谢您的回答。会相应改变。
    • 我不同意。角色是将逻辑与设计分离。更改任何对象的类不应影响页面的行为
    • @YardenST - 这是倒退的想法。 HTML 与设计无关,它与语义有关 - 页面的结构。这显然包括class 属性。它们不仅仅是 CSS 钩子,你不应该这样想它们。您 do not allude to your design decision 在创建 class 名称时,而不是 class 名称基于每个元素的 角色。您的设计决策在 CSS 文件中是分开的,当您更改设计时,您不会更改类名,只会更改 CSS 定义。
    猜你喜欢
    • 2012-02-13
    • 2010-12-27
    • 2012-06-29
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2012-10-11
    • 2013-06-28
    相关资源
    最近更新 更多