Làm cách nào để vô hiệu hóa jquery-ui có thể kéo?


97

Làm cách nào để tắt một jQuery có thể kéo, ví dụ: trong khi đăng lại UpdatePanel?

Câu trả lời:


148

Có thể tạo chức năng DisableDrag (myObject) và EnableDrag (myObject)

myObject.draggable( 'disable' )

Sau đó

myObject.draggable( 'enable' )

2
Những công việc này. Toàn bộ tài liệu cho Draggable () có ở đây . Cũng vậy với sắp xếp được () đối tượng (nếu bạn cho phép kéo-n-thả sắp xếp lại.)
nickb

3
Có nghĩa là các tài liệu có thể kéo () (bây giờ?) Ở đây , với liên kết của nickb, ở trên, sẽ chuyển đến bản demo . ;)
ruffin

Điều này cho phép tôi "không thể gọi phương pháp 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'"
Haseeb Zulfiqar


68

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

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

Để xóa vĩnh viễn hành vi có thể kéo, hãy sử dụng:

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

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

1
@jedanput tác dụng phụ của việc sử dụng vô hiệu hóa là các phần tử có thể kéo có giao diện xám. tiêu diệt dường như để yên bề ngoài.
samazi

19

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

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

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

Câu trả lời @Calciphus không phù hợp với tôi với vấn đề về độ mờ, vì vậy tôi đã sử dụng:

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

Hoạt động trên thiết bị di động.

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


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

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

11

Tôi mất một chút thời gian để tìm ra cách tắt tính năng có thể kéo khi thả — sử dụng ui.draggableđể tham chiếu đối tượng đang được kéo từ bên trong hàm thả:

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

HTH ai đó


Cảm ơn vì điều đó. 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ể kéo xuống trong AngularJS.
Banjo Drill

10

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

Khởi tạo có thể kéo 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ị vô hiệu hóa, sau khi init.

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

Điều này hoạt động nhưng có một tác dụng phụ là làm cho div của tôi có độ mờ khoảng 50% ... Tôi không biết tại sao.
Người ủng hộ của quỷ vào

@ScottBeeson Bất kỳ khi nào bạn tắt nội dung nào đó trong jQuery, nó sẽ thêm lớp "ui-state-disable". . Bạn có thể loại bỏ nó với: $ ( "ui-kéo ") removeClass (" ui-state-disabled")
Calciphus

7

Trong trường hợp hộp thoại, nó có một thuộc tính gọi là draggable, hãy đặt nó thành false.

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

Mặc dù câu hỏi đã cũ, nhưng tôi đã thử giải pháp được đề xuất và nó không hoạt động 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.


Tôi không chắc câu hỏi có liên quan cụ thể đến Hộp thoại jQueryUI không , nhưng tôi thấy bài đăng của bạn dù sao cũng hữu ích.
Shawn Eary

3

Sau đây là những gì nó sẽ 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
});

3

Tôi có một giải pháp đơn giản và thanh lịch mà không làm rối tung các lớp, kiểu, độ trong suốt và nội dung.

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

    $(".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();
            }    

        }
    });

Không có gì :)


0

Thay đổi draggablethuộc tính từ

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

đến

<span draggable="false">Label</span>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.