【问题标题】:How to debug and fix this?如何调试和解决这个问题?
【发布时间】:2011-06-15 19:11:22
【问题描述】:

在这个 JSFiddle 中

http://jsfiddle.net/littlesandra88/mzPxN/

我是否尝试使用 tablesorter plugin 对列进行排序。

问题

单击“N”可以很好地对数字列进行排序。

单击“已签名”也可以很好地对复选框列进行排序,但如果取消选中其中一个复选框,它们将不再正确排序。

当使用this点击复选框时添加01的技巧接缝

<td>
    <span class="hidden">1</span>
    <input type="checkbox" name="x" value="y">
</td>

$(document).ready(function() {

    $('#tableid input').click(function() {
         var order = this.checked ? '1' : '0';
         $(this).prev().html(order);
    })

})

并使用this作为排序算法

ts.addParser({
        id: 'input',
        is: function(s) {
            return s.toLowerCase().match(/<input[^>]*checkbox[^>]*/i); ;
        },
        format: function(s) {
            var integer = 0;
            if (s.toLowerCase().match(/<input[^>]*checked*/i)) {
                integer = 1;
            }
            return integer;
        },
        type: "numeric"
    });

但是我收到了错误not well formed

我是否在 html 和 JQuery 方面正确实现了它?

如果是这样,我该如何调试和修复它?

【问题讨论】:

  • 你在哪里得到错误?你不是说$(this).next().html(order);吗?

标签: javascript jquery


【解决方案1】:

您不需要花哨的格式化程序或任何东西:

查看我对您的小提琴的编辑:

http://jsfiddle.net/CgMZ9/

将跨度放在复选框之前:)

默认情况下,它会查看字段中首先出现的任何文本,这将是您的 0 或 1,然后对其进行排序:)

【讨论】:

  • 如果我取消选中 4991,它仍然像被选中一样排序。你也有这种情况吗?
  • 当然,这是我注释掉的 b/c:$(this).parents("table").trigger("update");我的错,把它留在里面,它会正常工作的
  • @Patricia:太好了!所以现在需要排序算法的额外复杂性。它有什么作用?
  • 不确定您的意思,tablesorter 会查看数据,看到它是一个数字,然后对其进行排序:)
  • @Patricia :我只是印象深刻的是,需要 $.tablesorter.addParser 才能对带有复选框的列进行排序 =) 是因为 $.tablesorter.addParser 直接查看复选框值,因此不需要span 诡计?
【解决方案2】:

在你的情况下隐藏的跨度是在改变之后

$(this).prev().html(order)

$(this).next().html(order)

Updated fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    相关资源
    最近更新 更多