0

在 ie8 上,我的可排序列表一切正常。但是,我在 ie7 上遇到了问题。

我的页面为每个员工设置了一个表格。有一个需要分配的工作列表,我将这些工作行拖放到员工表中。

起初,我遇到了无法放入已经为空的员工表的问题,但我通过在每个表中使用 .dontinclude 行的组合并添加接收函数(见下文)解决了这个问题:

jQuery_1_9_1(function() {
            jQuery_1_9_1('[id$="' + tname + '"] ').sortable({
                items: "tr:not(.dontinclude)",
                connectWith: ".connectedSortable ",
                receive:  function(ev, ui) {
                    //debugger;
                    ui.item.parent().find('tbody').append(ui.item);
                }
            }).disableSelection();
        });

我在创建表时添加了 .dontinclude 行(它们是动态构建的,而不是声明的),这意味着它是那里的第一行。添加前

:not(.dontinclude)

这些行不会添加到空表中。添加那行之后,它们会添加到表格中,但是它们会添加到 tbody 标记之后,这没有用。添加接收函数指定接收后添加的位置,这意味着元素现在出现在 tbody 中。

所以,在 ie8 中一切正常,直到我发现有些用户会在 ie7 上。一切都很顺利,直到我不小心在拖放过程中放开了一行,但没有超过我的一个可排序表。结果就彻底消失了。我检查了 DOM 页面,这些行再次添加到 tbody之外(可能导致它们在 ie7 上消失)。如果我在接收函数中放置一个调试器,我发现在这种情况下没有调用该函数 - 只有在我在可排序表上时才会调用它。

所以我认为我需要找到将项目放在可排序区域之外时调用的行为,并可能覆盖它。

这可能吗?也许与jquery droppable有关?

4

1 回答 1

0

好的,我明白了这一点。

看起来我最初把事情复杂化了。

不需要使用接收功能。

jQuery_1_9_1(function() {
            jQuery_1_9_1('[id$="' + tname + '"] tbody ').sortable({
                items: "tr:not(.dontinclude)",
                connectWith: ".connectedSortable tbody"
            }).disableSelection();
        });

我只需要在选择器和connectWith 中指定tbody。除了拥有 .dontinclude 行(在我的表格中,这只是表格标题行)之外,这似乎解决了这个问题,并确保仍然tbody 标记中添加值。

编辑我还应该添加,我的 'tname' id 和类 'sortable' 在 table 标签上指定。

于 2013-03-15T10:22:36.080 回答