【问题标题】:Javascript and django app / boilerplate integrationJavascript 和 django 应用程序/样板集成
【发布时间】:2013-11-03 06:15:16
【问题描述】:

我正在编写一个 Django 应用程序,并结合了样板模板。 我有一个带有复选框的表格,我正在尝试使用 javascript 实现全选复选框,但没有工作

按照这个推荐django checkbox select all by jquery我把main.js放进去

$("#selectAll").live('change',function() {
  $(".checkbox_delete:checkbox").attr('checked', this.checked);
});

我也试过直接放在index.html上

在我的 index.html 上你写了

<input type="checkbox"  id="selectAll"  />
<label for="selectAll"> Select</label>

 {% for event in latest_events_list %}
 <input type="checkbox" class="checkbox_delete" name="event" id="event.id"
         value="{{ event.id }}"  />
{% endfor %}

页面显示正确,但 javascript 不起作用

样板文件生成 js 文件的链接。在表头出现

<script src="/static/js/dh5bp/vendor/modernizr-2.6.2.min.js"></script>

在关闭body标签之前:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>window.jQuery || document.write ('<script     src="/static/js/dh5bp/vendor/jquery-1.10.2.min.js"><\/script>')</script>
 <script src="/static/js/dh5bp/plugins.js"></script>
 <script src="/static/js/main.js"></script>

所有的js文件都正确链接,我可以跟着他们

我没有 js 的经验,所以我不知道我是否遗漏了什么。

编辑:

我在两个浏览器上都安装了 firebug。在Firefox上它警告我

TypeError: $(...).live is not a function    

$("#selectAll").live('change',function() { 

所以我改变了代码

$(function(){
    $("#selectAll").change(function() {
    $(".checkbox_delete:checkbox").attr('checked', this.checked);
    });
 }); 

现在它只在我第一次加载页面时工作,但如果我“全选”和“取消全选”我不能再次“全选”它们

【问题讨论】:

  • 使用 firebug 检查页面中是否包含所有 js 文件。您可以发布一些代码让我们帮助您。
  • 我查过,都包含了,main.js、plugins.js、nodernizr和jquery.min.js

标签: javascript django boilerplate


【解决方案1】:
$(".checkbox_delete:checkbox").attr('checked', $(this).attr('checked));

试试这个

【讨论】:

  • '$(".checkbox_delete").attr('checked', $(this).attr('checked));'这必须有效。
【解决方案2】:

终于成功了,

问题在于 attr()

据此帖jquery select all checkboxes

在 jQuery 1.6 及更高版本中,prop() 应该用于“检查”状态,而不是 attr() 传递 true 或 false

最后的工作代码是

$("#selectAll").change(function() {
   $(".checkbox_delete:checkbox").prop('checked', this.checked);
});

【讨论】:

    【解决方案3】:

    您的代码中我能找到的唯一错误如下:

    $(".checkbox_delete:checkbox").attr('checked', this.checked);
    

    这应该是

    $(".checkbox_delete[type="checkbox"]").attr('checked', this.checked);
    

    注意

    [type="checkbox"] 如果你有好的类名并且不要在收音机等上使用.checkbox_delete,则不需要。

    您的原始选择器无效。您会在控制台中记录错误。

    在 firefox 中,此操作的快捷方式是 F12,如果您没有安装 FF / Chrome 的 firebug,我建议您这样做,因为它是检查 JS 错误的极好方法,通常会结束也在解决它们。

    【讨论】:

    • 我将编辑我的问题,提供更多详细信息,在您发表评论后获得
    • 这块$(".checkbox_delete[type="checkbox"]") 给我一个错误,缺少一些符号?
    • 对复选框使用单引号。 '$(".checkbox_delete[type='checkbox']")'
    • .live(); 也已被弃用,最好只绑定一个 .click(); 处理程序,检查复选框是否被勾选,然后从那里勾选所有其他复选框。 jquery 更新频繁,所有不推荐使用的函数都可以在其更新日志中找到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2021-04-18
    相关资源
    最近更新 更多