0

我有一堆元素,如下所示:

     <div class="droppableP" id="s-NSW" style="width:78px; height:63px; position: absolute; top: 223px; left: 532px;">  
 <div class="sensible"></div>  
      </div>  

他们都有类 droppableP 但显然不同的 id,我想在我正在破解的这个脚本中考虑代码。原始脚本只是为这些 div 中的每一个提供了一个特定的选择器,但除了它所处理的 id 之外,代码都是相似的,它是父级的 id 或另一个名称与之相关的 div。这是专门针对此 div 的原始代码:

$("#s-NSW > .sensible").droppable( {  
    accept : "#i-NSW",  
    tolerance : 'intersect',  
    activeClass : 'droppable-active',  
    hoverClass : 'droppable-hover',  
    drop : function() {  
        $('#s-NSW').addClass('s-NSW');  
        $('#s-NSW').addClass('encastrada');  //can't move any more..  
        $('#i-NSW').remove();  
        $('#s-NSW').animate( {  
            opacity: 0.25   
        },200, 'linear');  
        checkWin();  
    }  
 });  

以下是我想要考虑的因素,以便相同的代码可以完成所有这些,我最终也会进行链接,也许会摆脱内联样式,但这是我的第一次尝试:

$(".droppableP > .sensible").droppable( {  
    accept :    "#i" + $(this).parent().attr('id').substring(2),   
    tolerance : 'intersect',  
    activeClass : 'droppable-active',  
    hoverClass : 'droppable-hover',  
    drop : function() {  
  $(this).parent().addClass($(this).parent().attr('id'));  
  $(this).parent().addClass('encastrada');   
  $("#i" + ($this).parent().attr('id').substring(2)).remove();   
  $(this).parent().animate( {  
      opacity: 0.25   
  },200, 'linear');  
  checkWin();  
    }  
});

我得到的错误是:

$(this).parent().attr("id")未定义

非常感谢。我浏览了与我最接近的相关问题,结果发现它们根本不需要父函数。我是个菜鸟,所以如果这是一个愚蠢的问题,请不要对我大喊大叫。对不起,我在格式上度过了一段糟糕的时光

4

2 回答 2

1

您必须将每个可拖动元素传递给您的函数进行处理,如果您的 droppable 接受它,则返回 true。

尝试:

$(".droppableP > .sensible").droppable( {  
  accept : function(draggable) { 
    return $(draggable).attr("id") == "i" + $(this).parent().attr('id').substring(1);
},   
于 2010-04-19T22:00:17.817 回答
0

这是可行的解决方案:我需要一个 each 迭代器。我认为那是灵丹妙药。

     $(".droppableP > .sensible").each(function() {
        $(this).droppable( {
           accept :    "#i" + $(this).closest('.droppableP').attr('id').substring(1), 
           tolerance : 'intersect',
           activeClass : 'droppable-active',
           hoverClass : 'droppable-hover',
           drop : function() {
               //console.log($(this).closest());
               $(this).closest('.droppableP').addClass($(this).closest('.droppableP').attr('id'));
               $(this).closest('.droppableP').addClass('encastrado');
               $("#i" + $(this).closest('.droppableP').attr('id').substring(1)).remove();
               $(this).closest('.droppableP').animate( {
                     opacity: 0.25 
                  },
                  200, 
                  'linear'
               );
               checkWin();
           }
        }); 
 });
于 2010-04-22T03:08:33.690 回答