【问题标题】:&& in drop event&& 在 drop 事件中
【发布时间】:2012-10-28 19:08:49
【问题描述】:

我试图仅在所有 draggables 都被删除的情况下触发 drop 事件。

drop: function(event,ui){
            var dropd = "#"+ui.draggable.attr("id");
            if("#a_dra" && "#b_dra" && "#c_dra" && "#d_dra" == dropd){
                $("#whistle").get(0).play();
                dfd.resolve();
            };  
        },

这个code 有问题。当每个div 被丢弃并正确触发时,它就会起作用。 除了当我只删除#a_dra#d_dra 时,它也会触发,这是不可取的,因为我需要它随机。

我错过了什么?

提前致谢! :)

【问题讨论】:

    标签: jquery jquery-ui draggable droppable logical-operators


    【解决方案1】:
    if("#a_dra" && "#b_dra" && "#c_dra" && "#d_dra" == dropd){
    

    上面那行其实是指

    if(("#a_dra" == true) && ("#b_dra" == true) && ("#c_dra" == true) && ("#d_dra" == dropd)) {
    

    您不能像这样对多个值进行速记比较。

    您可以为每个被拖放的可拖动对象保留状态,以便检查它们是否都已被拖放,以便解决您的延迟问题:

    var dropped = {}
    
    ....
    
    drop: function(event,ui){
        var dropd = "#"+ui.draggable.attr("id");
        dropped[dropd] = true;
        if(dropped["#a_dra"] && dropped["#b_dra"] && dropped["#c_dra"] && dropped["#d_dra"]){
            $("#whistle").get(0).play();
            dfd.resolve();
        };  
    },
    

    【讨论】:

    • 所以它应该像if(("#a_dra" == dropd) && ("#b_dra" == dropd) && ("#c_dra" == dropd) && ("#d_dra" == dropd)) { ?因为它不会触发。
    • 不,这意味着您希望dropd 同时等于所有这些值。你想要|| 而不是&&
    • 但随后deferred 解析为第一个drop。我只是无法真正理解这一点,那么您建议的语法是什么?
    • 如果我只知道你对var dropped = {} 的意思。 :D 但它有效,我很感激! :)
    • var dropped = {} 定义了一个名为dropped 的新局部变量,并用一个空对象初始化它({} 是一个object literal constructor)。
    猜你喜欢
    • 2014-02-15
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多