如何在jquery ui droppable中使用动态接受值?

时间:2011-06-28 05:08:31

标签: jquery-ui draggable droppable

我正在使用Jquery-ui。 我在一个页面中有不同的可丢弃的ul(s),以及不同的可拖动的li(s)。我想要的是: 1. ul的标题彼此不同,如“FUNCTION”,“BUG”等。 2.李的班级彼此不同,如“.FUNCTOIN”,“。BUG”等。 3.标题为“FUNCTION”的ul只能接受带有“.FUNCTION”等级的li。 4.根据存储在数据库中的一些值,只有在视图中创建它们时才能知道ul的标题。

然后我遇到了一些问题,这里有不同的饱和度:

如果我使用常数值,它运作良好,如:

        $("ul.droppable").droppable({
            accept: ".FUNCTION",

虽然以下所有方式都失败了:

        $("ul.droppable").droppable({
            accept: "." + $(this).attr("title"), 

        $("ul.droppable").droppable({
            accept: '.' + $(this).attr("title"), 

        $("ul.droppable").droppable({
            accept: "\." + $(this).attr("title"), 

        $("ul.droppable").droppable({
            accept: '\.' + $(this).attr("title"), 

所以我把“。”在标题中尝试了以下内容,但所有这些都失败了:

        $("ul.droppable").droppable({
            accept: $(this).attr("title"), 

顺便说一下,当我的意思是“失败”时,没有错误,弹出等等。可放置的东西不起作用(不活跃,不会悬停,不能掉线。)。

我发现了很多的“魔法”或“接受”的Q / A,但是他们都使用了可以在运行时之前定义的东西。所以“接受”只能使用恒定值,或者我使用它的方式是错误的? 感谢您的回答或建议或评论可能会有所帮助。


根据Xnake的回答,这样做的方法是:

在旧代码droppable之前,添加前3行:

        $("ul.droppable.accept").droppable({
            accept: function (e) { if (e.hasClass($(this).attr('accept'))) return true; }
        });
        $("ul.droppable").droppable({
            activeClass: "ui-state-default",
            ... //this is the old code.

这意味着如果我们给droppable ul一个“accept”类,它只接受带有某个类的对象;否则,它可以接受任何可拖动的。

然后在视图中:

<ul class = "stories-of-category droppable accept" accept = "@map.Type" >
...
</ul>

如果任何具有@ map.Type同名类的对象,则可以将其删除。例如:

<ul title = ".."> //this is another ul.
    <li class = "@map.Type">
        @map.Title
    </li>
    ...
</ul>

1 个答案:

答案 0 :(得分:8)

您可以将accept中的droppable()替换为函数,并在其中指定您的条件:

accept: function(e){
    if(e.hasClass($(this).attr('title'))) return true;
}

或更短:

accept: function(e){
    return e.hasClass($(this).attr('title'));
}

感谢。