2009-08-24 31 views

Trả lời

136

thể tạo DisableDrag (myObject) và một hàm

myObject.draggable('disable') 

Sau đó

myObject.draggable('enable') 
+2

này hoạt động. Tài liệu đầy đủ cho draggable() là [ở đây] (http://jqueryui.com/demos/draggable/#options). Tương tự cho các đối tượng sắp xếp() (nếu bạn cho phép sắp xếp kéo-thả-thả lại.) – nickb

+3

Có thể nói rằng [các tài liệu có thể kéo() là (bây giờ?) Tại đây] (http://api.jqueryui.com/draggable /), với liên kết của nickb, ở trên, chuyển đến [demo] (http://jqueryui.com/draggable/). ;) – ruffin

+0

Điều này mang lại cho tôi "không thể gọi các phương thức trên có thể kéo trước khi khởi tạo; cố gắng gọi phương thức 'vô hiệu hóa'" –

11

Nó đã cho tôi một chút thời gian để tìm ra cách để vô hiệu hóa khả năng kéo vào thả sử dụng EnableDrag (myObject) ui.draggable để tham chiếu đối tượng đang được kéo từ bên trong chức năng thả:

$("#drop-target").droppable({ 
    drop: function(event, ui) { 
     ui.draggable.draggable("disable", 1); // *not* ui.draggable("disable", 1); 
     … 
    } 
}); 

HTH ai

+0

Cảm ơn vì điều này. Giải pháp này dường như hoạt động tốt khi sử dụng các chỉ thị có thể kéo/có thể điều hướng trong AngularJS. –

61

Để tạm thời vô hiệu hóa việc sử dụng hành vi kéo:

$('#item-id').draggable("disable") 

Để loại bỏ các hành vi kéo vĩnh viễn sử dụng:

$('#item-id').draggable("destroy") 
+6

Tôi thấy rằng 'vô hiệu hóa' có tác dụng phụ liên quan đến css, nhưng phá hủy các công trình hoàn hảo. –

+2

Có lẽ bạn có thể chỉ ra rằng tác dụng phụ là tốt. –

+1

@jedanput tác dụng phụ của việc sử dụng vô hiệu hóa là các yếu tố có thể kéo được có màu xám. phá hủy dường như để lại sự xuất hiện một mình. – samazi

9

Có vẻ như không ai nhìn vào tài liệu gốc. Có thể không có nó tại thời điểm đó))

Khởi tạo một kéo được với tùy chọn đã tắt được chỉ định.

$(".selector").draggable({ disabled: true }); 

Nhận hoặc đặt tùy chọn bị tắt sau init.

//getter 
var disabled = $(".selector").draggable("option", "disabled"); 
//setter 
$(".selector").draggable("option", "disabled", true); 
+0

Điều này làm việc nhưng có một tác dụng phụ làm cho div của tôi khoảng 50% opacity ... Tôi không có ý tưởng tại sao. –

+0

@ScottBeeson Bất cứ khi nào bạn vô hiệu hóa một cái gì đó trong jQuery, nó sẽ thêm lớp "ui-state-disabled". Bạn có thể xóa nó bằng: $ (". Ui-draggable"). RemoveClass ("ui-state-disabled") – Calciphus

6

Trong trường hợp hộp thoại, nó có thuộc tính có tên là kéo được, đặt thành false.

$("#yourDialog").dialog({ 
    draggable: false 
}); 

Cho dù câu hỏi là cũ, tôi đã thử giải pháp được đề xuất và nó không hoạt động đối với hộp thoại. Hy vọng điều này có thể giúp những người khác như tôi.

+0

Tôi không chắc chắn câu hỏi có liên quan cụ thể đến jQueryUI * Dialogs *, nhưng tôi đã tìm thấy bài đăng của bạn hữu ích. –

15

Để bật/tắt có thể kéo trong jQuery tôi đã sử dụng:

$("#draggable").draggable({ disabled: true });   

$("#draggable").draggable({ disabled: false }); 

@Calciphus câu trả lời không làm việc cho tôi với các vấn đề opacity, vì vậy tôi đã sử dụng:

div.ui-state-disabled.ui-draggable-disabled {opacity: 1;} 

Làm việc trên các thiết bị di động hoặc.

Đây là mã: http://jsfiddle.net/nn5aL/1/

+0

JSfiddle của bạn dường như không hoạt động. Các nút không nhấp (sử dụng Chrome mới nhất). Tôi đã cố gắng cập nhật nó cho các liên kết và gọi 'nút()' nhưng điều đó không giúp được gì. – ashes999

+0

@ ashes999, tôi có Chrome cuối cùng (30.0.1599.101) và vẫn hoạt động ... – CarinaPilar

+2

trong số tất cả các giải pháp được đưa ra, đây là người duy nhất làm việc 100% cho tôi - tất cả những người khác (sử dụng kết hợp tắt/tiêu diệt vv) chỉ không khắc phục vấn đề css. Trong ứng dụng của tôi bằng cách sử dụng kéo + thả, tôi thấy độ mờ đục là khác nhau đối với những yếu tố đã được kéo từ khi khởi tạo so với những yếu tố chưa được chạm vào. Tất cả rất lộn xộn. Nhờ @CarinaPilar cho cả giải pháp và jsfiddle để chứng minh điều đó. –

2

Sau đây là những gì điều này sẽ trông giống như bên trong .draggable({});

$("#yourDraggable").draggable({ 
    revert: "invalid" , 
    start: function(){ 
     $(this).css("opacity",0.3); 
    }, 
    stop: function(){ 
     $(this).draggable('disable') 
    }, 
    opacity: 0.7, 
    helper: function() { 
     $copy = $(this).clone(); 
     $copy.css({ 
      "list-style":"none", 
      "width":$(this).outerWidth() 
     }); 
     return $copy; 
    }, 
    appendTo: 'body', 
    scroll: false 
}); 
0

Thay đổi draggable thuộc tính từ

<span draggable="true">Label</span> 

để

<span draggable="false">Label</span> 
2

Tôi có một giải pháp đơn giản và thanh lịch mà không mess lên với các lớp, phong cách, mờ và các công cụ.

Đối với phần tử có thể kéo - bạn thêm sự kiện 'bắt đầu' sẽ diễn ra mỗi lần bạn cố di chuyển phần tử ở đâu đó. Bạn sẽ có một điều kiện di chuyển không hợp pháp. Đối với các động thái bất hợp pháp - hãy ngăn chúng với 'e.preventDefault();' như trong mã bên dưới.

$(".disc").draggable({ 
     revert: "invalid", 
     cursor: "move", 
     start: function(e, ui){     
      console.log("element is moving"); 

      if(SOME_CONDITION_FOR_ILLEGAL_MOVE){ 
       console.log("illegal move"); 
       //This will prevent moving the element from it's position 
       e.preventDefault(); 
      }  

     } 
    }); 

Bạn đang chào đón :)

Các vấn đề liên quan