2013-03-30 66 views
1

我有以下的jQuery代码拖动&操作来更改UI项目订单(#list UL)。我怎样才能做到这一点,如果按下CTRL键,拖动&移动,但离开原来的?JQuery拖动并移动,但如果按下CTRL键则保留原始值?

<script type="text/javascript"> 
$(document).ready(function(){ 
function slideout(){ 
setTimeout(function(){ 
$("#res").slideUp("slow", function() { 
     }); 

}, 2000);} 

    $("#res").hide(); 
    $(function() { 
    $("#list ul").sortable({ opacity: 0.4, cursor: 'move', update: function() { 

      var order = $(this).sortable("serialize") + '&update=update'; 
      $("#hload").fadeIn('fast'); 
      $.post("upd.php", order, function(theResponse){ 
       $("#res").html(theResponse); 
       $("#res").slideDown('slow'); 
       $("#hload").fadeOut('fast'); 
       slideout(); 

      }); 
     } 
     }); 
    }); 

}); 
</script> 

谢谢。

+0

? –

+0

Vury,我想在按CTRL而不是移动它时保留原始#list ul项。 – user2228185

+0

我的意思是拖放项目,但复制项目如果按下CTRL而不是移动它。可以说我有3件以下; 项目1 项目2 项目3 如果我按CTRL然后拖放项目3,离开那里的第3项,但复制这样的列表将是 项目3 项目1个 项目2 项目3 – user2228185

回答

2

首先,设置一个变量时Ctrl键是向下。

var ctrlDown = false; 
$(window).on("keydown", function(event) { 
    if (event.which === 17) { 
     ctrlDown = true; 
    } 
}).on("keyup", function(event) { 
    ctrlDown = false; 
}); 

然后,克隆你的项目,如果ctrlDown为真。

$(".sortable").sortable({start: function(event, ui) { 
    if (ctrlDown) { 
     $clone = ui.item.clone().insertBefore(ui.item); 
     $clone.css({position:"static"}); 
    } 
}}); 

这里是Fiddle

在你需要在窗口中单击该keydown和KeyUp事件之前将工作的小提琴。

编辑:我会留下原来的后代,但哇,这是比原来简单地使用事件对象的ctrlKey属性更容易。

$(document).ready(function() { 
    $(".sortable").sortable({start: function(event, ui) { 
     if (event.ctrlKey){ 
      $clone = ui.item.clone().insertBefore(ui.item); 
      $clone.css({position:"static"}); 
     } 
    }}); 
}); 

New Fiddle

+0

谢谢你iGanja,它现在工作:) – user2228185

+0

@ user2228185 OMG,我不敢相信我不记得事件对象有一个ctrlKey属性!请看我修改后的答案。 – iGanja

+0

伟大的方法,但是我看到第二个解决方案将不会取消拖放/复制,如果用户释放Ctrl键,所以他们无法取消操作。 – sham

0

这里是我想出了将移动多个列表之间的项目,但保留原始如果Ctrl按下小提琴。

 $(".connectedSortable").sortable({ 
     connectWith: ".connectedSortable", 
     placeholder: "ui-state-highlight", 
     helper: function(e,li) { 
       copyHelper= li.clone().insertAfter(li); 
       return li.clone(); 
     }, 
     stop: function() { 
       copyHelper && copyHelper.remove(); 
     }, 
     receive: function(event, ui) { 
      if (event.ctrlKey){ 
       copyHelper= null; 
      } 
      var myOrder = {}; 
      $(".sortable ul").each(function() { 
       var key = $(this).attr("data-name"); 
       myOrder[key] = []; 
       $(this).find('li').each(function(){ 
        myOrder[key].push($(this).attr("data-key")); 
       }); 
      }); 
      var arr = JSON.stringify(myOrder); 
      $('#field_mappings').val(arr); 
     } 
    }); 

http://jsfiddle.net/n92e5e2r/10/

要离开d&d时,按下CTRL
相关问题