2

我是一个对 jQuery 比较陌生的设计师,所以请多多包涵!

我已经组合了一个基于 jQuery 购物车模型的数据库查询创建程序。

本质上,用户将字段名称和布尔运算符拖到“购物车”区域并放下它们,从而创建可以转换为逗号分隔字符串并保存为查询的元素列表。拖动的元素实际上是原始元素的克隆。

购物车区域中元素的基本顺序是:

field name, boolean, constant or field name, optional and/or, etc.

这样你最终可能会得到这样的字符串:

product,equals,hardcoverbook,and,pubdate,lessthan,12/31/13

这与以下内容相同:

Product = HardcoverBook AND PubDate < 123113

为了保持查询创建区域的逻辑顺序,一般在删除一个字段后所有字段都被禁用,从而限制用户拖动操作符;删除布尔运算符后,所有布尔运算符都将被禁用。否则,您可能会得到一个无意义的查询,例如:

has,greaterthan,hardcoverbook,newspaper

当一个字段或运算符被删除时,它应该能够通过将其拖到垃圾箱 div 来删除。

同时,前一个元素不应再被删除——否则,用户可能会通过随机删除元素来对正在创建的查询造成严重破坏。

例如,其中“el”是一个被拖放的字段名称,一个“可删除”类作为 drop 函数的一部分被添加到其中,并从之前的列表元素中删除:

$(el).addClass("deletable").prev('li').removeClass("deletable");

这部分工作正常,即可以删除最后删除的列表元素,不能删除以前的列表元素。

我遇到的问题是,如果用户将已被拖放到查询创建区域 [“购物车”] 的列表元素拖动,则会创建该列表元素的克隆。然后,可以拖动该克隆,从而创建另一个克隆。

由于原始放置事件在放置的字段名称或运算符之后附加了一个逗号[为了以逗号分隔的字符串结束],我认为拖动放置的字段正在重新创建初始放置事件?您可以看到,因为每次停止拖动时,每个克隆都会附加一个逗号。

如果我使“购物车” div 不可排序,我可以阻止拖放的元素在被拖动时被克隆——但是我不能将它们拖到垃圾箱:

$("#cartInv ol").droppable({
    accept: "(#catalogProd2 li,#boolean li,#and_or li,#constant li)",
    accept: ":not(#catalogInv li,#catalogProd2 li,#catalogRB1 li,#catalogRB2 li)"
    }
    ).sortable("disable");

所以——对不起我的啰嗦——总之,我需要帮助来防止拖放的元素在被拖动时被克隆,同时保持它“可删除”,以便可以将它拖到垃圾箱。

我有一个显示克隆问题的页面的完整工作版本:

http://tinyurl.com/nr4tpbp

第二页显示了“购物车”不可排序时的行为——该元素不能被拖动,因此不能被克隆,但它也不能被拖动到垃圾箱:

http://tinyurl.com/qcawmax

非常感谢任何帮助!

4

0 回答 0